<?php

namespace App\Http\Controllers;

use App\DataTables\AdminUsersDataTable;
use Illuminate\Http\Request;
use App\AdminModel;
use Illuminate\Support\Str;
use Mail;
use Illuminate\Support\Facades\Log;
use App\AuditTrail;
use App\General;
use Illuminate\Support\Facades\Hash;
use App\Jobs\MTNCOIAdminAccountCreation;
use Carbon\Carbon;

class AdminUserController extends Controller
{
    public function index(AdminUsersDataTable $dt)
    {
      AuditTrail::create([
        'userid'=>auth()->guard('adminguard')->user()->id,
        'name'=>auth()->guard('adminguard')->user()->name,
        'activity'=>'View: Is viewing Admin Users',
        // 'message',
      ]);
        return $dt->render('admin.admins.index');
    }

    public function add(Request $r)
    {
        // $pass =Str::random(8);
        $pass = General::generatePassword();
        AdminModel::create([
    'name'=>$r->name,
    'email'=>$r->email,
    'annex'=>$r->annex ?? 0,
    'reports'=>$r->reports ?? 0,
    'assessment'=>$r->assessment ?? 0,
    'helpdesk'=>$r->helpdesk ?? 0,
    'analytics'=>$r->analytics ?? 0,
    'setup'=>$r->setup ?? 0,
    'password'=>Hash::make($pass),
    'reminder'=>$r->reminder??0,
  ]);

        // send mail to admin
        $data=[
    'name'=>$r->name,
    'email'=>$r->email,
    'password'=>$pass,
  ];

  $year = Carbon::now()->year;
  $rr=route('index');
  $this->sendmail('Scancom PLC ( MTN Ghana) Conflict of interest and Code of ethics',$r->email,"Hello ".$r->name.",\\n An administrator account has been created for you on the MTN CoI-CoE portal.\\n Kindly find below your login credentials to login and a link to the admin portal.\\n\\n Email: ".$r->email."\\n Password: ".$pass."\\n Admin Portal: ".$rr."\\n\\n Thanks,\\nMTN CoI-CoE ".$year);
        // MTNCOIAdminAccountCreation::dispatch($data);
        AuditTrail::create([
          'userid'=>auth()->guard('adminguard')->user()->id,
          'name'=>auth()->guard('adminguard')->user()->name,
          'activity'=>'Create: Created a new admin by name '.$r->name,
          // 'message',
        ]);
        Log::info('pass :'.$pass.' for :'.$r->name);
        return back()->with('success', $r->name."'s Admin Account Created");
    }



    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 view(AdminModel $id){
      if ($id !==null) {
        $admin=$id;
        AuditTrail::create([
          'userid'=>auth()->guard('adminguard')->user()->id,
          'name'=>auth()->guard('adminguard')->user()->name,
          'activity'=>'View: Is viewing Profile of adminuser '.$id->name.'('.$id->id.')',
          // 'message',
        ]);
        return view('admin.admins.view',compact('admin'));
      }else {
        return back()->with('error','Admin User not found');
      }

    }

    public function edit(AdminModel $id){
      if ($id !==null) {
        $admin=$id;
        AuditTrail::create([
          'userid'=>auth()->guard('adminguard')->user()->id,
          'name'=>auth()->guard('adminguard')->user()->name,
          'activity'=>'Edit: Is viewing Edit Page of adminuser '.$id->name.'('.$id->id.')',
          // 'message',
        ]);
        return view('admin.admins.edit',compact('admin'));
      }else {
        return back()->with('error','Admin User not found');
      }

    }


    public function update(AdminModel $id , Request $r){
      // return $r;
      if ($id !==null) {
        $id->update([
          'name'=>$r->name,
          'email'=>$r->email,
          'annex'=>$r->annex ?? 0,
          'reports'=>$r->reports ?? 0,
          'assessment'=>$r->assessment ?? 0,
          'helpdesk'=>$r->helpdesk ?? 0,
          'analytics'=>$r->analytics ?? 0,
          'setup'=>$r->setup ?? 0,
          'reminder'=>$r->reminder??0,
        ]);
        AuditTrail::create([
          'userid'=>auth()->guard('adminguard')->user()->id,
          'name'=>auth()->guard('adminguard')->user()->name,
          'activity'=>'Update: Updated details of adminuser '.$id->name.'('.$id->id.')',
          // 'message',
        ]);
        return redirect()->route('admin.users')->with('success','Update Successful');
      }else {
        return back()->with('error','Admin User not found');
      }
    }

    public function delete(AdminModel $id){
      if ($id !==null) {
        AuditTrail::create([
          'userid'=>auth()->guard('adminguard')->user()->id,
          'name'=>auth()->guard('adminguard')->user()->name,
          'activity'=>'Delete: Deleted adminuser '.$id->name.'('.$id->id.')',
          // 'message',
        ]);
        // delete assess

        $id->delete();
        return redirect()->route('admin.users')->with('success','Delete Successful');
      }else {
        return back()->with('error','Admin User not found');
      }
    }
}
