<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Mail;
use Illuminate\Support\Facades\Validator;
use GuzzleHttp\Client as GuzzleClient;
use App\CoiUsers;
use App\VerifiedUsers;
use App\Department;
use App\Jobs\SendAdminHelpRequest;
use App\UsersDb;
use App\ConflictOfInterest;
use App\Annexure_One;
use App\Annexure_Two;
use Illuminate\Support\Str;
use App\Annexure_Three;
use Carbon\Carbon;
use App\PreLoginHelpDesk;
use App\Jobs\HelpDeskNoticeMail;
use App\Annexure_Four;
use App\Annexure_Five;
use App\Division;
use App\Annexure_Six;
use App\Annexure_Seven;
use App\Annexure_Eight;
use App\Annexure_Nine;
use App\Annexure_Ten;
use App\Annexure_Eleven;
use App\Annexure_Twelve;
use App\Annexure_Thirteen;
use App\Annexure_Fourteen;
use App\Annexure_Fifteen;
use App\Annexure_Status;
use App\Annexure_Sixteen;
use App\Mail\SendEmailOtp;
use App\AuditTrail;


use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
// use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;

class PagesController extends Controller
{
    public function index()
    {
        return view('index');
    }


    public function emailotps(Request $request)
    {
        // return $request;


        $email = $request->email;
        if ($email == null) {
            return redirect()->route('/')->with('error', 'Session Expired, Please re-enter your email/phone number again. ');
        }
        $validator = Validator::make(['email' => $email], [
            'email' => 'email'
        ]);

        if ($validator->passes()) {


            Log::channel('coi')->info('user with email ' . $email . ' is attempting to access the coi. About to query if user exists');

            // $clause = $sessionUser['type'] == 'phone' ? [['phone', 'like', '%' . substr($sessionUser['phone'], -9) . '%']] : ['email' => $sessionUser['email']];
            $currentYear = Carbon::now()->year;

            $getuser = CoiUsers::query()
                ->where('email', $email)
                ->whereRaw("YEAR(created_at) = $currentYear")
                ->latest()
                ->first();



            if ($getuser !== null) {

                if ($getuser->can_login == 0) {
                    Log::channel('coi')->info($getuser->name . '(' . $getuser->id . ') attempted loggin in but has his access rights revoked');
                    return redirect()->route('/')->with('error', 'Sorry, the Portal is Closed');
                }
                Log::channel('coi')->info('user with email ' . $email . ' found. preparing otp and sending via mail');
                $otp = rand(1000, 9999);
                $vu = new VerifiedUsers();
                $vu->user_id = $getuser->id;
                $vu->otp = $otp;
                $vu->save();

                session(['met' => 'mail']);
                session(['otpid' => $vu->id]);
                $data = [
                    'email' => $email,
                    'otp' => $otp,

                ];
                Log::channel('coi')->info('Otp: ' . $otp . ' send to email ' . $email);
                Log::channel('coi')->info('init curl');

                $this->sendmail('SCANCOM PLC (MTN Ghana) Conflict of Interest Policy & Code of Ethics', $email, "Kindly enter " . $otp . " to proceed with your declaration. \\n\\nThanks,\\nMTN CoI-CoE 2023");


                Log::channel('coi')->info('Otp: ' . $otp . ' send to email ' . $email);
                Session::flash('otp', 'Enter the code sent to your email');
                return view('verifyotp', $data);
            } else {
                Log::channel('coi')->info('user with email ' . $email . 'not found');
                AuditTrail::create([
                    'userid' => 'N/A',
                    'name' => 'N/A',
                    'activity' => 'Attempt Access: A user tried to access the portal using the email/phone ' . $email . ' but no record of such user found',
                    // 'message',
                ]);
                return redirect()->to(route('/'))->with('error', 'Email Entered Does Not Match Our Records');
            }
        }
        else {


            $checkstring = substr($email, 0, 1);
            $newnum = '';
            if ($checkstring == 0) {
                $newnum = "233" . substr($email, 1);
            } elseif ($checkstring == 2) {
                $newnum = "0" . substr($email, 3);
            }
            // return $newnum;
            Log::channel('coi')->info('user attempting to access coi with phone number ' . $email . ' about to query if user exists');
            $currentYear = Carbon::now()->year;

            // dd($request->all());

            $getuser = CoiUsers::query()->whereRaw("YEAR(created_at) = $currentYear")->where('phone', $email)->orWhere('phone', $newnum)->latest()->first();
            // $getuser = UsersDb::query()->where('phone',$email)->first();

            // dd($getuser);
            // return $getuser;
            Log::channel('coi')->info('user obj. ' . $getuser);
            // dd($getuser);
            if ($getuser !== null) {
                if ($getuser->can_login == 0) {
                    Log::channel('coi')->info($getuser->name . '(' . $getuser->id . ') attempted loggin in but has his access rights revoked');
                    return redirect()->route('/')->with('error', 'Sorry, the Portal is Closed');
                }
                Log::channel('coi')->info('user with phone number ' . $email . 'or ' . $newnum . 'found. preparing otp to send via text');
                $otp = rand(1000, 9999);
                $vu = new VerifiedUsers();
                // dd($vu);
                $vu->user_id = $getuser->id;
                $vu->otp = $otp;
                $vu->save();

                session(['otpid' => $vu->id]);
                $number = $getuser->phone;
                $source = 'CoI-CoE OTP';
                $message = "HELLO, YOUR MTN CoI-CoE OTP CODE IS " . $otp;
                //
                $smsname = env('SMS_NAME');
                $smspass = env('SMS_PASSWORD');


                $url = "https://test.mtnmessenger.com/api/sms?username=" . $smsname . "&password=" . $smspass . "&source=$source&destination=" . $number . "&message=" . $message;

                $client = new GuzzleClient();

                $request = $client->request('GET', $url, [
                    'http_errors' => false,
                ]);
                session(['met' => 'phone']);
                $response = json_decode($request->getBody()->getContents(), true);
                $data = [
                    'email' => $email,
                    // 'met' =>'phone'
                    //'otp' => $otp
                ];
                Log::channel('coi')->info('Otp :' . $otp . ' sent to user with phone number ' . $number . ' SMS response is :' . $response['message']);
                Session::flash('otp', 'Enter the code sent to your phone');
                return view('verifyotp', $data);
            } else {
                AuditTrail::create([
                    'userid' => 'N/A',
                    'name' => 'N/A',
                    'activity' => 'Attempt Access: A user tried to access the portal using the email/phone' . $email . ' but no record of such user found',
                    // 'message',
                ]);
                return redirect()->to(route('/'))->with('error', 'Email/Username Entered Does Not Exist');
            }

        }
    }



    public function sendmail($subj, $mailto, $msg)
    {
        $curl = curl_init();
        $mailurl = env('MAIL_URL');
        $mailauth = env('MAIL_AUTH');
        curl_setopt_array($curl, array(
            CURLOPT_URL => $mailurl,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS => '{
    "subject":"' . $subj . '",
    "recipient":"' . $mailto . '",
    "msg":"' . $msg . '"
  }',
            CURLOPT_HTTPHEADER => array(
                $mailauth,
                'Content-Type: application/json'
            ),
        ));

        $response = curl_exec($curl);

        curl_close($curl);
        Log::channel('coi')->info('curl executed and closed.');
        // echo $response;
        Log::channel('coi')->info('curl response: ' . $response);
    }

    public function coipageCont()
    {
        $data = Session::get('data');
        // dd($data);
        return view('conflicts-cont', $data);
    }

    public function coipage()
    {
        $data = Session::get('data');
        return view('conflicts', $data);
    }

    public function annexpage()
    {

        $data = Session::get('datax');

        // dd($data);
        // return $data;
        if ($data == null) {
            return redirect()->route('/')->with('error', 'Please Enter Your Username/Email First');
        } else {
            return view('annexures.annexures', $data);
        }
    }

    public function landingPageModal()
    {
        $sessionData = session()->get('user');
        $userid = $sessionData['userid'];

        // dd($sessionData);

        $getUser = CoiUsers::find($userid);

        $getUser->log('Logged In');
        session(['userid' => $getUser->id]);
        $dept = Department::get();

        $myDeptId = Department::query()->where('name', $getUser->dept)->first();


        if (empty($myDeptId)) {
            $myDeptId = 16;
        } else {
            $myDeptId = $myDeptId->id;
        }

        if ($getUser !== null) {

            if ($getUser->coi_status == null) {
                Log::channel('coi')->info($getUser->name . '(' . $getUser->id . ') coi status is null thus redirecting to policy page');
                $data = [

                    'email' => $getUser->email,
                    'name' => $getUser->name,
                    'dept' => $getUser->dept,
                    'depts' => $dept,
                    'myDeptId' => $myDeptId
                ];
                $getUser->log('Redirected to Policy Page');
                session(['data' => $data]);
                return redirect()->route('coipage');
            }
            elseif ($getUser->coi_status != null) {

                if ($getUser->a1_declarable_interest !== null) {
                    session(['anexone' => $getUser->id]);
                }
                if ($getUser->a2_declarable_interest !== null) {
                    session(['anextwo' => $getUser->id]);
                }

                if ($getUser->a3_declarable_interest !== null) {
                    session(['anexthree' => $getUser->id]);
                }

                if ($getUser->a4_declarable_interest !== null) {
                    session(['anexfour' => $getUser->id]);
                }

                if ($getUser->a5_declarable_interest !== null) {
                    session(['anex5' => $getUser->id]);
                }

                if ($getUser->a6_declarable_interest !== null) {
                    session(['anex6' => $getUser->id]);
                }

                if ($getUser->a7_declarable_interest !== null) {
                    session(['anex7' => $getUser->id]);
                }

                if ($getUser->a8_declarable_interest !== null) {
                    session(['anex8' => $getUser->id]);
                }

                if ($getUser->a9_declarable_interest !== null) {
                    session(['anex9' => $getUser->id]);
                }


                if ($getUser->a10_declarable_interest !== null) {
                    session(['anex10' => $getUser->id]);
                }


                if ($getUser->a11_declarable_interest !== null) {
                    session(['anex11' => $getUser->id]);
                }


                if ($getUser->a12_declarable_interest !== null) {
                    session(['anex12' => $getUser->id]);
                }


                if ($getUser->a13_declarable_interest !== null) {
                    session(['anex13' => $getUser->id]);
                }
                if ($getUser->a14_declarable_interest !== null) {
                    session(['anex14' => $getUser->id]);
                }
                if ($getUser->a15_declarable_interest !== null) {
                    session(['anex15' => $getUser->id]);
                }
                if ($getUser->a16_declarable_interest !== null) {
                    session(['anex16' => $getUser->id]);
                }
                if ($getUser->a17_declarable_interest_17 !== null) {
                    session(['anex17' => $getUser->id]);
                }

                if ($getUser->a20_declarable_interest_20 !== null) {
                    session(['anex20' => $getUser->id]);
                }

                if ($getUser->status == 'Completed' || $getUser->status == 'Updated' || $getUser->status == 'UpdatedFromLastYear') {
                    Log::channel('coi')->info($getUser->name . '(' . $getUser->id . ') coi status is agreed and user has previously completed the annexures thus redirecting to the completed dashboard');
                    Session::flash('comp', 'You Have Already Completed/Updated This Form. Thank You!');

                    $getUser->log('Redirected to completed dashboard');
                    return redirect()->to(route('completed-coi'));
                }


                $data = [
                    'userid' => $getUser->id,
                    'name' => $getUser->fname,
                    'a1' => $getUser->a1_declarable_interest,
                    'a2' => $getUser->a2_declarable_interest,
                    'a3' => $getUser->a3_declarable_interest,
                    'a4' => $getUser->a4_declarable_interest,
                    'a5' => $getUser->a5_declarable_interest,
                    'a6' => $getUser->a6_declarable_interest,
                    'a7' => $getUser->a7_declarable_interest,
                    'a8' => $getUser->a8_declarable_interest,
                    'a9' => $getUser->a9_declarable_interest,
                    'a10' => $getUser->a10_declarable_interest,
                    'a11' => $getUser->a11_declarable_interest,
                    'a12' => $getUser->a12_declarable_interest,
                    'a13' => $getUser->a13_declarable_interest,
                    'a14' => $getUser->a14_declarable_interest,
                    'a15' => $getUser->a15_declarable_interest,
                    'a16' => $getUser->a16_declarable_interest,
                    'a17' => $getUser->a17_declarable_interest_17,
                    'a18' => $getUser->a18_declarable_interest_18,
                    'a19' => $getUser->a19_declarable_interest_19,
                    'a20' => $getUser->a20_declarable_interest_20,
                    'user' => $getUser,
                    // 'getUser' => $getUser,
                ];

                // dd($getUser);
                Log::channel('coi')->info($getUser->name . '(' . $getUser->id . ') coi status is agreed , redirecting to annexure page');
                $getUser->log('Redirected to annexure page');
                session(['datax' => $data]);
                return redirect()->route('annexpage');
            }
        }
    }


    public function landingPage()
    {
        $sessionData = session()->get('user');
        $userid = $sessionData['userid'];

        // dd($sessionData);

        $currentYear = Carbon::now()->year;
        $lastYear = Carbon::now()->subYear()->year;

        $getUser = CoiUsers::query()->where('id', $userid)->whereRaw("YEAR(created_at) = $currentYear")->first();
        $useremail = $getUser->email;
        $userphone = $getUser->phone;
        // dd($lastYear);



        // $email = $sessionData['email'];
        $clause = $sessionData['type'] == 'phone' ? [['phone', 'like', '%' . substr($sessionData['phone'], -9) . '%']] : ['email' => $sessionData['email']];



        $getUser = CoiUsers::query()->where($clause)->latest()->first();
        // dd($getUser);

        $show_modal = false;
        $createdYear = Carbon::parse($getUser->created_at)->year;

        $getUsersLastyearRecord = CoiUsers::whereYear('created_at', $lastYear)
            ->where(function ($query) use ($userphone,$useremail) {
                $query->where('email', $useremail)
                    ->orWhere('phone', $userphone);
            })
            ->first();

            // dd($getUsersLastyearRecord);
            if($getUsersLastyearRecord !== null && $getUser->coi_status == null && $getUser->status == null){
                $show_modal = true;
            }
        // dd($show_modal);

        return view('landing', compact('getUser', 'show_modal'));
    }




    public function coiContinueLastYear()
    {
        $sessionUser = session()->get('user');
        $userid = $sessionUser['userid'];
        $currentYear = Carbon::now()->year;
        // $clause = $sessionUser['type'] == 'phone' ? [['phone', 'like', '%' . substr($sessionUser['phone'], -9) . '%']] : ['email' => $sessionUser['email']];
        $lastYear = Carbon::now()->subYear()->year;

        $getUser = CoiUsers::query()->where('id', $userid)->whereRaw("YEAR(created_at) = $currentYear")->first();
        $useremail = $getUser->email;
        $userphone = $getUser->phone;




        $getUsersLastyearRecord = CoiUsers::whereYear('created_at', $lastYear)
        ->where(function ($query) use ($userphone,$useremail) {
            $query->where('email', $useremail)
                ->orWhere('phone', $userphone);
        })
        ->first();
        // dd($getUsersLastyearRecord);
        // $previousYear = date('Y')-1;

        // $previousUser = CoiUsers::query()->where($clause)
        //     ->whereYear('created_at', $previousYear)
        //     ->first();

        $dept = Department::get();

        // $myDeptId = Department::query()->where('name', $getUsersLastyearRecord->dept)->first();

        // dd($myDeptId);


        // if (empty($myDeptId)) {
        //     $myDeptId = 16;
        // } else {
        //     $myDeptId = $myDeptId->id;
        // }

        if ($getUsersLastyearRecord !== null) {
            Log::channel('coi')->info($getUser->name . '(' . $getUser->id . ') coi status is null thus redirecting to policy page');
            $data = [
                'email' => $getUsersLastyearRecord->email,
                'name' => $getUsersLastyearRecord->name,
                'dept' => $getUsersLastyearRecord->dept,
                'depts' => $dept,
                // 'myDeptId' => $myDeptId
            ];
            $getUsersLastyearRecord->log('Redirected to Policy Page');
            session(['data' => $data]);
            return redirect()->route('coipage.cont');
        }
    }

    public function continueLastYearAnnexure()
    {
        $sessionUser = session()->get('user');
        $userid = $sessionUser['userid'];
        $currentYear = Carbon::now()->year;
        $lastYear = Carbon::now()->subYear()->year;

        $getUser = CoiUsers::query()->where('id', $userid)->whereRaw("YEAR(created_at) = $currentYear")->first();
        $useremail = $getUser->email;
        $userphone = $getUser->phone;



        $user = CoiUsers::whereYear('created_at', $lastYear)
        ->where(function ($query) use ($userphone,$useremail) {
            $query->where('email', $useremail)
                ->orWhere('phone', $userphone);
        })
        ->first();

        // dd($userid);

        if ($user) {
            if ($user->a1_declarable_interest !== null) {
                session(['anexone' => $user->id]);
            }

            if ($user->a2_declarable_interest !== null) {
                session(['anextwo' => $user->id]);
            }

            if ($user->a3_declarable_interest !== null) {
                session(['anexthree' => $user->id]);
            }

            if ($user->a4_declarable_interest !== null) {
                session(['anexfour' => $user->id]);
            }

            if ($user->a5_declarable_interest !== null) {
                session(['anex5' => $user->id]);
            }

            if ($user->a6_declarable_interest !== null) {
                session(['anex6' => $user->id]);
            }

            if ($user->a7_declarable_interest !== null) {
                session(['anex7' => $user->id]);
            }

            if ($user->a8_declarable_interest !== null) {
                session(['anex8' => $user->id]);
            }

            if ($user->a9_declarable_interest !== null) {
                session(['anex9' => $user->id]);
            }


            if ($user->a10_declarable_interest !== null) {
                session(['anex10' => $user->id]);
            }


            if ($user->a11_declarable_interest !== null) {
                session(['anex11' => $user->id]);
            }


            if ($user->a12_declarable_interest !== null) {
                session(['anex12' => $user->id]);
            }


            if ($user->a13_declarable_interest !== null) {
                session(['anex13' => $user->id]);
            }


            if ($user->a14_declarable_interest !== null) {
                session(['anex14' => $user->id]);
            }


            if ($user->a15_declarable_interest !== null) {
                session(['anex15' => $user->id]);
            }


            if ($user->a16_declarable_interest !== null) {
                session(['anex16' => $user->id]);
            }

            if ($user->a17_declarable_interest_17 !== null) {
                session(['anex17' => $user->id]);
            }




            if ($user->a20_declarable_interest_20 !== null) {
                session(['anex20' => $user->id]);
            }

            $data = [
                'userid' => $userid,
                'name' => $user->name,
                'a1' => $user->a1_declarable_interest,
                'a2' => $user->a2_declarable_interest,
                'a3' => $user->a3_declarable_interest,
                'a4' => $user->a4_declarable_interest,
                'a5' => $user->a5_declarable_interest,
                'a6' => $user->a6_declarable_interest,
                'a7' => $user->a7_declarable_interest,
                'a8' => $user->a8_declarable_interest,
                'a9' => $user->a9_declarable_interest,
                'a10' => $user->a10_declarable_interest,
                'a11' => $user->a11_declarable_interest,
                'a12' => $user->a12_declarable_interest,
                'a13' => $user->a13_declarable_interest,
                'a14' => $user->a14_declarable_interest,
                'a15' => $user->a15_declarable_interest,
                'a16' => $user->a16_declarable_interest,
                'a17' => $user->a17_declarable_interest_17,
                'a18' => $user->a18_declarable_interest_18,
                'a19' => $user->a19_declarable_interest_19,
                'a20' => $user->a20_declarable_interest_20,
                'user' => $user,
                'currentUser' => $getUser
            ];
            // dd($getUser->coeForm);

            $getUser->log('Redirected to Edit annexures');
            return view('continuecoi', $data);
        } else {

            session()->flash('error', 'You Currently Dont Have A Response For The Previous Year, Kindly Explore The Fill For This Year Option');

            return redirect()->back();
        }
    }

    public function coiMidPage($getuserId)
    {
        $getuser = CoiUsers::query()->where('id', '=', $getuserId)->first();

        $dept = Department::get();

        $myDeptId = Department::query()->where('name', $getuser->dept)->first();

        if (empty($myDeptId)) {
            $myDeptId = 16;
        } else {
            $myDeptId = $myDeptId->id;
        }

        if ($getuser !== null) {
            Log::channel('coi')->info($getuser->name . '(' . $getuser->id . ') coi status is null thus redirecting to policy page');
            $data = [
                'email' => $getuser->email,
                'name' => $getuser->name,
                'dept' => $getuser->dept,
                'depts' => $dept,
                'myDeptId' => $myDeptId
            ];
            $getuser->log('Redirected to Policy Page');
            session(['data' => $data]);
            return redirect()->route('coipage');
        }
    }


    public function verifyotp(Request $request)
    {
        // dd($request->all());
        $email = $request->input('email');

        $one = $request->input('one');
        $two = $request->input('two');
        $three = $request->input('three');
        $four = $request->input('four');

        $code = $one . $two . $three . $four;

        $checkstring = substr($email, 0, 1);
        $newnum = '';
        if ($checkstring == 0) {
            $newnum = "233" . substr($email, 1);
        } elseif ($checkstring == 2) {
            $newnum = "0" . substr($email, 3);
        }
        //after verify check where to direct
        $currentYear = Carbon::now()->year;
        $getuser = CoiUsers::query()->where('email', $email)->orWhere('phone', $newnum)->orWhere('phone', $email)->whereRaw("YEAR(created_at) = $currentYear")->latest()->first();


        Log::channel('coi')->info('user with email: ' . $email . ' is about verifying otp:' . $code);
        $otp = VerifiedUsers::query()->where('used_at', null)->where('user_id', $getuser->id)->latest()->first();
        // dd($otp);


        if ($otp !== null && $code == $otp->otp) {
            $afterTwoMinutes = Carbon::now()->subMinutes(2);
            // $TimeCreated = $otp->created_at;

            if ($afterTwoMinutes->isAfter($otp->created_at)) {
                $data = [
                    'email' => $email,
                    //'otp' => $otp
                ];

                Session::flash('error', 'Expired OTP Inputted!');
                AuditTrail::create([
                    'userid' => 'N/A',
                    'name' => 'N/A',
                    'activity' => 'Expired OTP Verification: User with email/phone ' . $email . ' Expired otp Verification. Code entered was ' . $code,
                    // 'message',
                ]);
                return view('verifyotp', $data);
            }


            Log::channel('coi')->info('OTP: ' . $code . ' verified for user with email: ' . $email . 'Checking to redirect to policy page or annexure page');
            $otp->used_at = date('d-m-y h:i:s');

            $otp->save();

            // $otp->delete();
            $data = [
                'email' => $email
            ];
            // return $getuser;

            $getuser->log('Logged In');

            $loginType = filter_var($email, FILTER_VALIDATE_EMAIL) !== false ? 'email' : 'phone';
            $sessionData = session()->put('user', [
                'userid' => $getuser->id,
                'email' => $email,
                'phone' => $newnum,
                'type' => $loginType
            ]);

            // dd($getuser);
            return redirect()->route('landing.page');
        }
        else {
            $data = [
                'email' => $email,
                //'otp' => $otp
            ];

            Session::flash('error', 'Invalid OTP Inputted!');
            AuditTrail::create([
                'userid' => 'N/A',
                'name' => 'N/A',
                'activity' => 'Failed OTP Verification: User with email/phone ' . $email . ' Failed otp Verification. Code entered was ' . $code,
                // 'message',
            ]);
            return view('verifyotp', $data);
        }
    }


    // public function verifyotpOld(Request $request)
    // {

    //     $email = $request->input('email');

    //     $one = $request->input('one');
    //     $two = $request->input('two');
    //     $three = $request->input('three');
    //     $four = $request->input('four');

    //     $code = $one . $two . $three . $four;
    //     Log::channel('coi')->info('user with email: ' . $email . ' is about verifying otp:' . $code);
    //     $otp = VerifiedUsers::query()->where('otp', $code)->where('used_at', null)->first();

    //     if ($otp !== null && $code == $otp->otp) {
    //         Log::channel('coi')->info('OTP: ' . $code . ' verified for user with email: ' . $email . 'Checking to redirect to policy page or annexure page');
    //         $otp->used_at = date('d-m-y h:i:s');

    //         $otp->save();

    //         $otp->delete();
    //         $data = [
    //             'email' => $email
    //         ];

    //         $checkstring = substr($email, 0, 1);
    //         $newnum = '';
    //         if ($checkstring == 0) {
    //             $newnum = "233" . substr($email, 1);
    //         } elseif ($checkstring == 2) {
    //             $newnum = "0" . substr($email, 3);
    //         }
    //         //after verify check where to direct
    //         $getuser = CoiUsers::query()->where('email', $email)->orWhere('phone', $newnum)->orWhere('phone', $email)->first();
    //         // return $getuser;

    //         $getuser->log('Logged In');
    //         session(['userid' => $getuser->id]);
    //         $dept = Department::get();

    //         $myDeptId = Department::query()->where('name', $getuser->dept)->first();


    //         // dd($myDeptId);
    //         if (empty($myDeptId)) {
    //             $myDeptId = 16;
    //         } else {
    //             $myDeptId = $myDeptId->id;
    //         }

    //         if ($getuser !== null) {

    //             if ($getuser->coi_status == null) {
    //                 Log::channel('coi')->info($getuser->name . '(' . $getuser->id . ') coi status is null thus redirecting to policy page');
    //                 $data = [

    //                     'email' => $getuser->email,
    //                     'name' => $getuser->name,
    //                     'dept' => $getuser->dept,
    //                     'depts' => $dept,
    //                     'myDeptId' => $myDeptId
    //                 ];
    //                 $getuser->log('Redirected to Policy Page');
    //                 session(['data' => $data]);
    //                 return redirect()->route('coipage');
    //             } elseif ($getuser->coi_status != null) {

    //                 if ($getuser->a1_declarable_interest !== null) {
    //                     session(['anexone' => $getuser->id]);
    //                 }
    //                 if ($getuser->a2_declarable_interest !== null) {
    //                     session(['anextwo' => $getuser->id]);
    //                 }

    //                 if ($getuser->a3_declarable_interest !== null) {
    //                     session(['anexthree' => $getuser->id]);
    //                 }

    //                 if ($getuser->a4_declarable_interest !== null) {
    //                     session(['anexfour' => $getuser->id]);
    //                 }

    //                 if ($getuser->a5_declarable_interest !== null) {
    //                     session(['anex5' => $getuser->id]);
    //                 }

    //                 if ($getuser->a6_declarable_interest !== null) {
    //                     session(['anex6' => $getuser->id]);
    //                 }

    //                 if ($getuser->a7_declarable_interest !== null) {
    //                     session(['anex7' => $getuser->id]);
    //                 }

    //                 if ($getuser->a8_declarable_interest !== null) {
    //                     session(['anex8' => $getuser->id]);
    //                 }

    //                 if ($getuser->a9_declarable_interest !== null) {
    //                     session(['anex9' => $getuser->id]);
    //                 }


    //                 if ($getuser->a10_declarable_interest !== null) {
    //                     session(['anex10' => $getuser->id]);
    //                 }


    //                 if ($getuser->a11_declarable_interest !== null) {
    //                     session(['anex11' => $getuser->id]);
    //                 }


    //                 if ($getuser->a12_declarable_interest !== null) {
    //                     session(['anex12' => $getuser->id]);
    //                 }


    //                 if ($getuser->a13_declarable_interest !== null) {
    //                     session(['anex13' => $getuser->id]);
    //                 }
    //                 if ($getuser->a14_declarable_interest !== null) {
    //                     session(['anex14' => $getuser->id]);
    //                 }
    //                 if ($getuser->a15_declarable_interest !== null) {
    //                     session(['anex15' => $getuser->id]);
    //                 }
    //                 if ($getuser->a16_declarable_interest !== null) {
    //                     session(['anex16' => $getuser->id]);
    //                 }
    //                 if ($getuser->a17_declarable_interest_17 !== null) {
    //                     session(['anex17' => $getuser->id]);
    //                 }

    //                 if ($getuser->a20_declarable_interest_20 !== null) {
    //                     session(['anex20' => $getuser->id]);
    //                 }

    //                 if ($getuser->status == 'Completed' || $getuser->status == 'Updated') {
    //                     Log::channel('coi')->info($getuser->name . '(' . $getuser->id . ') coi status is agreed and user has previously completed the annexures thus redirecting to the completed dashboard');
    //                     Session::flash('comp', 'You Have Already Completed/Updated This Form. Thank You!');

    //                     $getuser->log('Redirected to completed dashboard');
    //                     return redirect()->to(route('completed-coi'));
    //                 }
    //                 $data = [
    //                     'userid' => $getuser->id,
    //                     'name' => $getuser->fname,
    //                     'a1' => $getuser->a1_declarable_interest,
    //                     'a2' => $getuser->a2_declarable_interest,
    //                     'a3' => $getuser->a3_declarable_interest,
    //                     'a4' => $getuser->a4_declarable_interest,
    //                     'a5' => $getuser->a5_declarable_interest,
    //                     'a6' => $getuser->a6_declarable_interest,
    //                     'a7' => $getuser->a7_declarable_interest,
    //                     'a8' => $getuser->a8_declarable_interest,
    //                     'a9' => $getuser->a9_declarable_interest,
    //                     'a10' => $getuser->a10_declarable_interest,
    //                     'a11' => $getuser->a11_declarable_interest,
    //                     'a12' => $getuser->a12_declarable_interest,
    //                     'a13' => $getuser->a13_declarable_interest,
    //                     'a14' => $getuser->a14_declarable_interest,
    //                     'a15' => $getuser->a15_declarable_interest,
    //                     'a16' => $getuser->a16_declarable_interest,
    //                     'a17' => $getuser->a17_declarable_interest_17,
    //                     'a18' => $getuser->a18_declarable_interest_18,
    //                     'a19' => $getuser->a19_declarable_interest_19,
    //                     'a20' => $getuser->a20_declarable_interest_20,
    //                     'user' => $getuser,
    //                     'getuser' => $getuser,
    //                 ];
    //                 Log::channel('coi')->info($getuser->name . '(' . $getuser->id . ') coi status is agreed , redirecting to annexure page');
    //                 $getuser->log('Redirected to annexure page');
    //                 session(['datax' => $data]);
    //                 return redirect()->route('annexpage');
    //                 // return view('annexures.annexures',$data);
    //             }
    //         }
    //     } else {
    //         $data = [
    //             'email' => $email,
    //             //'otp' => $otp
    //         ];

    //         Session::flash('error', 'Invalid OTP Inputted!');
    //         AuditTrail::create([
    //             'userid' => 'N/A',
    //             'name' => 'N/A',
    //             'activity' => 'Failed OTP Verification: User with email/phone ' . $email . ' Failed otp Verification. Code entered was ' . $code,
    //             // 'message',
    //         ]);
    //         return view('verifyotp', $data);
    //     }
    // }



    public function appendconflicts(Request $request)
    {
        // dd('test');
        $customMessage = [
            'dept.required' => "Please Select A Department",
            'declared_at.required' => "Declared At field is required",
            'declared_date.required' => "Declared Date field is required",
            'name.required' => "Full Name Is required",
        ];
        $rules = [
            'dept' => 'required',
            'declared_at' => ['required',],
            'declared_date' => ['required'],
            'name' => ['required']
        ];
        // $validate = validation($request->all(), $rules);
        $validate = Validator::make($request->all(), $rules, $customMessage);
        if ($validate->fails()) {
            // return  $validate->messages();
            return back()->with('error', $validate->errors()->first())->withInput();
        }


        $fname = $request->input('name');
        $dept = $request->input('dept');
        // return $request;
        $sessionUser = session()->get('user');
        $userid = $sessionUser['userid'];
        // dd($userid);
        $getdiv = CoiUsers::query()->where('dept', $dept)->first();
        $getuser = CoiUsers::query()->where('id', $userid)->first();

        // $clause = $sessionUser['type'] == 'phone' ? [['phone', 'like', '%' . substr($sessionUser['phone'], -9) . '%']] : ['email' => $sessionUser['email']];
        CoiUsers::query()->where('id', $userid)->update(
            [
                'declared_at' => $request->declared_at,
                'declared_date' => $request->declared_date,
                'starttime' => Carbon::now(),
                'name' => $request->name,
                'coi_status' => 'Agree',
                'status' => 'Pending',
                'dept' => $dept,
                'division' => $getdiv->division ?? null
            ]
        );

        Log::channel('coi')->info(($getuser->name ?? '') . '(' . ($getuser->id ?? '') . ') just agreed to the policy page and is being moved to the annexure page');

        $getuser->log('Agreed to policy statement');
        // dd($getuser);

        session(['name' => $fname]);
        return redirect()->route('annexures');
    }

    public function appendconflictsCont(Request $request)
    {

        $customMessage = [
            'dept.required' => "Please Select A Department",
            'declared_at.required' => "Declared At field is required",
            'declared_date.required' => "Declared Date field is required",
            'name.required' => "Full Name Is required",
        ];
        $rules = [
            'dept' => 'required',
            'declared_at' => ['required',],
            'declared_date' => ['required'],
            'name' => ['required']
        ];
        // $validate = validation($request->all(), $rules);
        $validate = Validator::make($request->all(), $rules, $customMessage);
        if ($validate->fails()) {
            // return  $validate->messages();
            return back()->with('error', $validate->errors()->first())->withInput();
        }


        $fname = $request->input('name');
        $dept = $request->input('dept');
        // return $request;
        $sessionUser = session()->get('user');

        $userid = $sessionUser['userid'];

        // $clause = $sessionUser['type'] == 'phone' ? [['phone', 'like', '%' . substr($sessionUser['phone'], -9) . '%']] : ['email' => $sessionUser['email']];

        $getdiv = CoiUsers::query()->where('dept', $dept)->first();
        $getuser = CoiUsers::query()->where('id', $userid)->first();

        // dd($getuser);
        CoiUsers::query()->where('id', $getuser->id)->update(
            [
                'declared_at' => $request->declared_at,
                'declared_date' => $request->declared_date,
                'starttime' => Carbon::now(),
                'name' => $request->name,
                'coi_status' => 'Agree',
                'status' => 'Pending',
                'dept' => $dept,
                'division' => $getdiv->division ?? null
            ]
        );


        Log::channel('coi')->info(($getuser->name ?? '') . '(' . ($getuser->id ?? '') . ') just agreed to the policy page and is being moved to the annexure page');

        $getuser->log('Agreed to policy statement');
        session(['name' => $fname]);
        return redirect()->route('last.year.annex');
    }

    public function resendmailcode(Request $r)
    {
        //disable all unused codes
        $email = $r->email;
        $dataxx = Session::get('otpid');
        $dd = date('d-m-y h:i:s');
        $nullotp = DB::table('verified_users')
            ->where('id', $dataxx)
            ->delete();
        $currentYear = Carbon::now()->year;
        $getuser = CoiUsers::query()->where('email', $email)->whereRaw("YEAR(created_at) = $currentYear")->latest()->first();
        $otp = rand(1000, 9999);
        $vu = new VerifiedUsers();
        $vu->otp = $otp;
        $vu->user_id = $getuser->id;
        $vu->save();
        $data = [
            'email' => $email,
            'otp' => $otp,
            'met' => 'mail'
        ];
        Log::channel('coi')->info('user with email: ' . $email . ' requested a new otp code. Code: ' . $otp . 'sent!');
        // Mail::to($email)->send(new SendEmailOtp($data));
        $this->sendmail('SCANCOM PLC (MTN Ghana) Conflict of Interest Policy & Code of Ethics', $email, "Kindly enter " . $otp . " to proceed with your declaration. \\n\\nThanks,\\nMTN CoI-CoE 2023");
        Session::flash('otp', 'Enter the code sent to your email');
        // return redirect(route('emailotps',$data));
        return view('verifyotp', $data);
    }

    public function resendphonecode(Request $r)
    {
        //disable all unused codes
        $email = $r->email;
        // return "hi";
        $dataxx = Session::get('otpid');
        // return $dataxx;
        $dd = date('d-m-y h:i:s');
        $nullotp = DB::table('verified_users')
            ->where('id', $dataxx)
            ->delete();
        $currentYear = Carbon::now()->year;
        $getuser = CoiUsers::query()->where('phone', $email)->whereRaw("YEAR(created_at) = $currentYear")->latest()->first();

        if ($getuser !== null) {
            $otp = rand(1000, 9999);
            $vu = new VerifiedUsers();
            $vu->otp = $otp;
            $vu->user_id = $getuser->id;
            $vu->save();
            $number = $getuser->phone;
            $source = 'CoI-CoE OTP';

            $message = "HELLO, YOUR MTN CoI-CoE OTP CODE IS " . $otp;

            $smsname = env('SMS_NAME');
            $smspass = env('SMS_PASSWORD');


            $url = "https://test.mtnmessenger.com/api/sms?username=" . $smsname . "&password=" . $smspass . "&source=$source&destination=" . $number . "&message=" . $message;


            $client = new GuzzleClient();

            $request = $client->request('GET', $url, [
                'http_errors' => false,
            ]);

            $response = json_decode($request->getBody()->getContents(), true);
            $data = [
                'email' => $email,
                'met' => 'phone'
                //'otp' => $otp
            ];
            Log::channel('coi')->info('user with phone number: ' . $email . ' requested a new otp code. Code: ' . $otp . 'sent! SMS response is ' . $response['message']);
            Session::flash('otp', 'Enter the code sent to your phone');

            // return redirect(route('emailotps',$data));
            return view('verifyotp', $data);
        }
    }


    public function logout()
    {
        $sessionUser = session()->get('user');
        $id = $sessionUser['userid'];
        $getuser = CoiUsers::where('id', $id)->first();
        Log::channel('coi')->info('user(' . $getuser->name . ') logged out');
        session()->flush();
        return redirect()->route('/');
    }

    public function watchvideo()
    {
        return view('watchvideo');
    }

    public function manual()
    {
        $pdfPath = public_path('manual.pdf');

        if (! file_exists($pdfPath)) {
            abort(404, 'The user-guide file does not exist.');
        }

        $headers = [
            'Content-Type' => 'application/pdf',
        ];

        return response()->file($pdfPath, $headers);
    }

    public function view_policy()
    {
        return view('view_policy');
    }

    public function message()
    {
        return view('message');
    }

    public function failedresend()
    {
        return redirect()->route('/')->with('error', 'Session Expired, Please re-enter your email/phone number again. ');
    }



    public function gethelp()
    {
        return view('getlogin');
    }

    public function postpreloginhelp(Request $r)
    {
        $str = Str::random(5) . $r->name;
        PreLoginHelpDesk::create([
            'helpid' => $str,
            'name' => $r->name,
            'email' => $r->email,
            'phone' => $r->phone,
            'dept' => $r->dept,
            'division' => $r->division,
            'comment' => $r->comment,
        ]);



        $data = [
            'name' => $r->name,
            'email' => $r->email,
            'dept' => $r->dept,
            'division' => $r->division,
            'helpid' => $str
        ];



        $this->sendmail('SCANCOM PLC (MTN Ghana) Conflict of Interest Policy & Code of Ethics', $r->email, "Hello " . $r->name . ",\\n Your enquiry request has been received and the Administrator would respond to you shortly.\\n Help Desk id: " . $str . "\\n\\n Best Regards,\\n MTN CoI-CoE " . Carbon::now()->year);

        $adminmail = env('AdminEmail');
        $this->sendmail('SCANCOM PLC (MTN Ghana) Conflict of Interest Policy & Code of Ethics', $adminmail, "Hello Admin,\\n " . $r->name . " from " . $r->dept . " department and " . $r->division . " division  is requesting for assistance in gaining access to their MTN COI Account with their credentials.\\n Kindly visit the Help Desk section at the Administrative Portal to assist " . $r->name . " \\n with the appropriate assistance needed. \\n Help Desk id: " . $str . "\\n\\n Best Regards,\\n MTN CoI-CoE " . Carbon::now()->year);

        return redirect()->route('/')->with('success', 'Help request sent, you will receive a response shortly');
    }

    public function coePage()
    {
        $sessionData = session()->get('user');

        $userid = $sessionData['userid'];
        $coiUser = CoiUsers::find($userid);

        // dd($coiUser);

        $show_modal = false;
        $createdYear = Carbon::parse($coiUser->created_at)->year;
        $currentYear = Carbon::now()->year;

        if ($coiUser->coi_status != null || $createdYear != $currentYear) {
            $show_modal = true;
        }
        //  dd($show_modal);
        return view('coe', compact('coiUser', 'show_modal'));
    }
}
