<?php
/**
 * Created by PhpStorm.
 * User: sunilkhorwal
 * Date: 2019-05-30
 * Time: 15:57
 */

namespace App\Avanse\Services\SubService;

use App\Avanse\DataModels\AvanseCustomer;
use App\Avanse\Services\AvanseServices;
use App\AvanseCreateCustomer;
use App\Bureau;
use App\Slack;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use App\Http\Controllers\ApiController;
use App\ConsumerApplication;
use App\ConsumerApplicationElement;
use Illuminate\Support\Facades\Mail;
use App\Templates;
//use App\Events\V1\EventPostCreateCustomer;
use App\Http\Controllers\Admin\ConsumerDocument;
use App\Http\Controllers\Admin\ConsumerApplicationController;

class CreateCustomer extends Bureau {

    public function createCustomer(){
        $this->request = $this->getReport($this->setBureauRequest());
        if (!$this->isRepeat()){
            $avanseCustomer = new AvanseCustomer($this->request);
            $response = (new AvanseServices($this->request))->createCustomer($avanseCustomer);
            if ($response){
                $ret = $this->updateAttributes();
                //event(new EventPostCreateCustomer($this->request->get('id')));
                return $ret;
            }
            return $avanseCustomer->error;
        } else { // repeast customer
            //event(new EventPostCreateCustomer($this->request->get('id')));
        }

        return $this->request->get('avanse_customer_id') ?? false;
    }

    private function isRepeat(){
        /*$api = new ApiController();
        $application = ConsumerApplication::where('id', $this->request->get('id'))->first([
            'id', 'pan_card', 'email', 'mobile_number', 'aadhaar_card', 'co_applicant_pan_card', 'co_applicant_email', 'co_applicant_mobile_number', 'co_applicant_aadhaar_card', 'applicant_id', 'co_applicant_id'
        ]);
        $id = $api->checkEligibility(new Request([
            'pan' => $application->pan_card, 'email' => $application->email, 'mobile_number' => $application->mobile_number, 'aadhaar_card' => $application->aadhaar_card, 'co_applicant_pan_card' => $application->co_applicant_pan_card, 'co_applicant_email' => $application->co_applicant_email, 'co_applicant_mobile_number' => $application->co_applicant_mobile_number, 'co_applicant_aadhaar_card' => $application->co_applicant_aadhaar_card
        ]));

        $applicant_id = $this->request->get('applicant_type') == 1 ? $application->applicant_id : $application->co_applicant_id;*/

        //$this->request->merge(['applicant_id' => $applicant_id]);

        /*if($applicant_id == 1) {
            $application = ConsumerApplication::where('id', $id)->first(['applicant_id']);
        }else{
            $application = ConsumerApplication::where('id', $id)->first(['co_applicant_id as applicant_id']);
        }*/
        if ($this->request->has('applicant_id')) {
            $avanseCreateCustomer = AvanseCreateCustomer::where('applicant_id', $this->request->get('applicant_id'))->first(['id']);
            if (isset($avanseCreateCustomer->id)) {
                $this->request->merge(['avanse_customer_id' => $avanseCreateCustomer->id]);
                $this->updateAttributes();
                return $avanseCreateCustomer->id;
            }
        }

        return false;
    }

    private function updateAttributes(){
        if($this->request->get('avanse_customer_id')) {
            if (!$this->request->has('applicant_type') || $this->request->get('applicant_type') == 1) {
                ConsumerApplicationElement::where('application_id', $this->request->get('id'))->update(['avanse_customer_id' => $this->request->get('avanse_customer_id')]);
            }
            ConsumerApplication::where('id', $this->request->get('id'))->update(['lender_id' => AvanseServices::$lender_id]);
        }
        return $this->request->get('avanse_customer_id');
    }

    /*
        below function is triggered(via queue) when an application is successfully sent to avanse
    */
    public static function postCreateActions($appObj) {

        if ($appObj instanceof ConsumerApplication) {

            return self::sendNotification($appObj);
        }
        return 'Invalid loan application object';

    }


    public static function sendNotification($appObj) {

        $request = new Request();
        $request->request->add([
            'bot' => true,
            'test_bot' => false,
            'from_mail' => env('CENTRALOPS')
        ]);

        $document = (new ConsumerDocument($request));
        $documentDetails = $document->getDocument($appObj->id);

        if ($documentDetails instanceof RedirectResponse){
            return true;
        }
        $consumer_app_link = 'https://lnk.creditfair.in/Wgmx';

        // send sms whatapp to applicant
        $entity = ['templateid' => '1207162322139256614', 'entityid' => Templates::$entityid];
        if (!empty($appObj->mobile_number)) {
            $mobile_number = '91' . $appObj->mobile_number;
            $message = "Dear ".$appObj->name.", We are happy to inform you that your loan has been approved for an amount of Rs ".$appObj->approved_amount." towards your purchase at ".$documentDetails['user']['merchant_name'].". Track your application on our app ".$consumer_app_link.". Thanks, Team Credit Fair";
            send_sms($mobile_number, ['message' => $message, 'id' => $appObj->id, 'id_type' => 'application_id', 'templateDetails' => $entity]);
            sendWhatsAppMessage($appObj->mobile_number, ['id' => $appObj->id, 'messageString' => $message, 'templateId' => Templates::$applicant_approve_partner, 'args' => [$appObj->name , $appObj->approved_amount, $documentDetails['user']['merchant_name'], $consumer_app_link]]);
        }

        // send sms whatsapp to co-applicant
        if (!empty($appObj->co_applicant_mobile_number)) {
            $co_mobile_number = '91' . $appObj->co_applicant_mobile_number;
            $message = "Dear ".$appObj->co_applicant_name.", We are happy to inform you that your loan has been approved for an amount of Rs ".$appObj->approved_amount." towards your purchase at ".$documentDetails['user']['merchant_name'].". Track your application on our app ".$consumer_app_link.". Thanks, Team Credit Fair";
            send_sms($co_mobile_number, ['message' => $message, 'id' => $appObj->id, 'id_type' => 'application_id', 'templateDetails' => $entity]);
            sendWhatsAppMessage($appObj->co_applicant_mobile_number, ['id' => $appObj->id, 'messageString' => $message, 'templateId' => Templates::$applicant_approve_partner, 'args' => [$appObj->co_applicant_name , $appObj->approved_amount, $documentDetails['user']['merchant_name'], $consumer_app_link]]);
        }

        // send email to applicant and co-applicant
        if($appObj->email) {
            $email = $appObj->email;
            $cc_email = '';
            if($appObj->co_applicant_email) {
                $cc_email = $appObj->co_applicant_email;
            }
            $id = $appObj->id;
            Mail::send('emails.reminders.basic_reminder', [
                'body' => view('emails.reminders.send_to_avanse', $documentDetails),
                'lender_id' => $documentDetails['lender']['id'],
                'is_include_footer' => false
            ], function ($message) use ($id, $email, $cc_email) {
                $message->to($email)
                    ->subject('Your loan application '.$id.' has been approved')
                    ->cc('ops@creditfair.in');
                if(!empty($cc_email)) {
                    $message->cc($cc_email);
                }
            });
        }
        unset($request, $documentDetails, $document);
        return true;
    }


}
