<?php

namespace App\Http\Controllers;

use App\Company;
use App\CompanyEmail;
use App\DataTables\ClientEmailDataTable;
use App\DataTables\SingleClientEmailDataTable;
use App\Notifications\Alertify;
use App\Notifications\EmailRegistration;
use App\User;
use App\UserSenderId;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Str;
use Mail;

class ClientEmailController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @param ClientEmailDataTable $email
     * @return \Illuminate\Http\JsonResponse|\Illuminate\View\View
     */
    public function index(ClientEmailDataTable $email)
    {
        return $email->render('admin.company.email.index');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @param Request $request
     * @return void
     */
    public function create(Request $request)
    {
        if ($request->isMethod('post')) {
            $this->validate($request, [
                'source_mail' => 'required'
            ]);

            $data = $request->all();
            $data['company_id'] = Auth::user()->company->id;
            $contains = Str::contains($request->input('source_mail'), ['@']);
            if (!$contains)
                return redirect()->back()->withErrors('This is not a valid email address');

            CompanyEmail::query()->create($data);

            return redirect()->back()->with('success', 'Email Successfully inserted, you will be notified after review');
        }
    }


    public function edit(Request $request, $id)
    {
        $data = $request->all();

        $data['status'] = null;
        $data['comment'] = null;

        $email = CompanyEmail::query()->find($id);
        $email->update($data);

        return redirect()->back()->with('success', strtoupper($request->input('source_mail') . ' successfully updated'));
    }


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

    public function delete($id)
    {
        try {
            $email = CompanyEmail::query()->find($id);

            $email->delete();
        } catch (\Exception $exception) {
            return redirect()->back()->withErrors('Sorry request could not be processed, contact support for assistance');
        }

        return redirect()->back()->with('success', 'Email ID successfully deleted');
    }


    public function approve($id)
    {
        $email = CompanyEmail::query()->find($id);

        if (empty($email))
            return redirect()->back()->withErrors('Email Not Found');

        $company = Company::query()->find($email->company_id);

        if (empty($company))
            return redirect()->back()->withErrors('Company Not Found');


        $data['status'] = 1;
        $data['comment'] = null;
        $email->update($data);

        $msg = "Hello {$company->name},
Your Email ID, {$email->source_mail}
has been approved 
Thank you.";

        $head = "Email Registration Approval";
        $subject = "MTN MESSENGER";
        $from    = "mtn@messenger.com";
        $to      = "{$company->users->email}";

        $content['head'] =  $head;
        $content['subject'] = $subject;
        $content['from'] = $from;
        $content['body'] = "Your Email ID, {$email->source_mail} has been successfully approved";
        $content['to'] = $to;
        $content['name'] = $company->users->username;


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


        return redirect()->back()->with('success', 'Email Successfully Approved');
    }


    public function reject(Request $request, $id)
    {
        $email = CompanyEmail::query()->find($id);

        if (empty($email))
            return redirect()->back()->withErrors('Email Not Found');

        $company = Company::query()->find($email->company_id);

        if (empty($company))
            return redirect()->back()->withErrors('Company Not Found');


        if (empty($request->input('comment')))
            return redirect()->back()->withErrors('Comment Is Required');


        $data['status'] = 2;
        $data['comment'] = $request->input('comment');
        $email->update($data);

        $msg = "Hello {$company->name},
Your Email ID, {$email->source_mail}
has been rejected because {$request->input('comment')} 
Thank you.";

        $head = "Email Registration Rejection";
        $subject = "MTN MESSENGER";
        $from    = "mtn@messenger.com";
        $to      = "{$company->users->email}";

        $content['head'] =  $head;
        $content['subject'] = $subject;
        $content['from'] = $from;
        $content['body'] = "Your Email ID, {$email->source_mail} has been rejected <br> <b>Reason:</b> {$request->input('comment')}";
        $content['to'] = $to;
        $content['name'] = $company->users->username;


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


        return redirect()->back()->with('success', 'Email Successfully Approved');
    }

    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);
    }


    private  function sendEmail($content)
    {
        Mail::send('email_approved', $content, function ($m) use ($content) {
            $m->from('mtn@messenger.com', 'MESSENGER');
            $m->to($content['to'],  $content['name']);
            $m->subject('MTN MESSENGER');
        });
    }
}
