<?php

namespace App\Opt;

use App\AdminAccessRight;
use App\CompanyStatus;
use App\DataTables\ClientSenderIDTable;
use App\DataTables\SingleUserDataTable;
use App\User;
use App\UserSenderId;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Mail;

trait CompanyTrait
{

    public function approval($id)

    {

        $update = CompanyStatus::query()->where('company_id',$id)->first();

        if(empty($update))
            return redirect()->back()->withErrors('REQUEST CODE COULD NOT BE FOUND FOR THIS COMPANY');

//        Auth::user()->logs($update->company->users->credit->updated_by);

        if($update->company->users->credit->updated_by != 'api_user'){
            $balance = $update->company->users->credit->price * 50;
            $update->company->users->credit->update(['new_bal' => $balance,'credited'=>$balance]);
        }

        $records['status'] = 1;
        $update->update($records);

        $string = null;

        $s_ids = UserSenderId::query()->where('user_id',$update->company->users->id)->get();

        foreach ($s_ids as $ss_ids):
            $string .= $ss_ids->sender_id.', ';  //forms into a string
            $ss_ids->update(['status'=>true]);  //updates sender Ids
        endforeach;

        $url = $update->company->users->role_id == 3 ? route('reseller.login') : route('login');

        Auth::user()->trail("Approved Company {$update->company->name}");


        $msg = "Hello {$update->company->name},
Your account for the MTN Business Messenger has been created with username and password 
username : {$update->company->users->username}
password : {$update->company->users->pass}
url : {$url}
Thank You,
MTN MESSENGER";



try {

        $this->sendSms($msg,$update->company->users->phone_number);

        $data['email']      = $update->company->users->email;
        $data['name']       = $update->company->name;
        $data['c_username'] = $update->company->users->username;
        $data['c_password'] = $update->company->users->pass;
        $data['url']        = $url;
        $data['content']    = "Your account for the MTN Business Messenger has been created with username and password";

        /** @noinspection PhpUndefinedClassInspection */
        Mail::send('emails.admin_login', $data, function ($m) use ($data) {
            $m->from('mtn@messenger.com', 'MESSENGER');
            $m->to($data['email'],  $data['name']);
            $m->subject('MTN MESSENGER');
        });
}catch (\Exception $ex){}

        return redirect()->route('admin.root.company')->with('success','Company Successfully Approved');
    }

    public function rejection(Request $request,$id)
    {
        $update = CompanyStatus::query()->where('company_id',$id)->first();
        if(empty($update))
            return redirect()->back()->withErrors('REQUEST CODE COULD NOT BE FOUND FOR THIS COMPANY');

        if(empty($request->comment))
            return redirect()->back()->withErrors('COMMENT CANNOT BE NULL');

        $records['status'] = 2;
        $records['comment'] = $request->comment;

        $update->update($records);

        $msg = "Hello {$update->company->name},
Your registration has been declined because: {$request->comment}.
kindly review the data you provided and apply again.";
        $this->sendSms($msg,$update->company->users->phone_number);

//        Auth::user()->logs("APPROVED COMPANY WITH REQUEST CODE {$update->r_code}");


        $data['email']     = $update->company->users->email;
        $data['name']      = $update->company->name;
        $data['content']   = "Your registration was not unsuccessful";
        $data['reason']   = $request->comment;


        /** @noinspection PhpUndefinedClassInspection */
        Mail::send('emails.admin_login', $data, function ($m) use ($data) {
            $m->from('mtn@messenger.com', 'MESSENGER');
            $m->to($data['email'],  $data['name']);
            $m->subject('MTN MESSENGER');
        });

        return redirect()->route('admin.root.company')->with('success','Company Successfully Rejected');
    }

    public function user(SingleUserDataTable $single,$user_id)
    {
        $user = User::query()->find($user_id);
        if(empty($user))
            return redirect()->back()->withErrors('User details could not be found, it may be that it has been deleted from the system');

        session(['c_user' => $user_id]);
        return $single->render('admin.root.user.index',compact('user'));
    }

    private  function sendSms($text,$phone)
    {
        $message = urlencode($text);
        $num = urlencode($phone);

        $url = "https://deywuro.com/api/sms?username=sammy&password=cse@2021_npontu&source=Messenger&destination=" . $num . "&message=" . $message;

        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_exec($curl);
        curl_close($curl);
    }

    public function second_approval($id)
    {
        $update = CompanyStatus::query()->where('company_id',$id)->first();
        if(empty($update))
            return redirect()->back()->withErrors('COMPANY COULD NOT BE FOUND');

        /** Push Record to next staff  **/
        $records['status'] = 3;
        $update->update($records);

        $adminEmail  = AdminAccessRight::query()->where('value',2)->get();

        $emails['email'] = array();
        $emails['approval'] = 'hello';

        //finds 2nd level admins and push their emails in an array
        foreach ($adminEmail as $mail):
            $search = User::query()->find($mail->user_id);
            if($search):
                array_push($emails['email'],$search->email);
            endif;
        endforeach;

            /** Sends Email To The Client with sender ID approval list **/
        if(!empty($emails)):
            Mail::send('emails.admin_login', $emails, function ($m) use (&$emails) {
                $m->from('mtn@messenger.com', 'MESSENGER');
                $m->to($emails['email']);
                $m->subject('MTN MESSENGER');
            });
        endif;

        /** End pushing of message to next staff */
        $senderArray = array();
        $string = null;

        $s_ids = UserSenderId::query()->where('user_id',$update->company->users->id)->get();

        foreach ($s_ids as $ss_ids):
            $string .= $ss_ids->sender_id.', ';  //forms into a string
            $ss_ids->update(['status'=>true]);  //updates sender Ids
        endforeach;


        $senderArray['sender_ids'] = rtrim(strtoupper($string),', ');    //trims string
        $senderArray['email'] = $update->company->users->email;
        $senderArray['name'] = $update->company->name;


        return redirect()->route('admin.root.company')->with('success','Registration successfully moved to next staff for approval');
    }

    public function user_sender_id(ClientSenderIDTable $client,$id)
    {
        session(['this_user_id'=>$id]);
        return $client->render('admin.company.senderId.single',[
            'name'=> User::query()->find($id)
        ]);
    }




}
