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

namespace App\Avanse\DataModels;

use App\Avanse\Processes\AvanseProcesses;
use App\AvanseCreateCustomer;
use App\AvanseCreateFinance;
use App\AvanseDisbursement;
use App\AvanseDisbursementStatus;
use App\ConsumerApplication;
use App\ConsumerApplicationElement;
use App\ConsumerApplicationFiles;
use App\Http\Controllers\Admin\ConsumerApplicationController;
use App\Http\Controllers\Admin\ConsumerDocument;
use App\Http\Controllers\Admin\DisbursementController;
use App\MultiStageDisbursement;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Slack;
use Illuminate\Support\Facades\Storage;
use App\ApplicationEMICalculation;
use App\CreditReport;
use Illuminate\Support\Facades\Mail;

class AvanseSearchCustomer
{

    public $error = null;
    public $customers = null;
    private $request;
    public $service = null;

    public function __construct(Request $request)
    {

        $this->request = $request;
    }

    public function getPayload()
    {

        if ($this->service) {
            $service = $this->service;
            return $this->$service();
        }

        if (!$this->dataInitialize()){
            return false;
        }

        return [
                'firstName' => $this->request->get('fName'),
                'middleName' => $this->request->get('mName'),
                'lastName' => $this->request->get('lName'),
                'shortName' => '',
                'phoneNumber' => $this->request->get('phone'),
                'custEMail' => $this->request->get('email'),
                'custPAN' => $this->request->get('pan'),
                'dateofBirth' => '',
                'custUID' => '',
                'custVoterId' => '',
                'custDrivingLic' => '',
                'custPassport' => ''
        ];
    }

    private function dataInitialize(){
        $application = ConsumerApplication::where('id', $this->request->get('id'))->first(['id','name','co_applicant_name','mobile_number','co_applicant_mobile_number','email','co_applicant_email','pan_card','co_applicant_pan_card']);



        $name = explode(' ', $this->request->get('applicant_type') == 1 ? $application->name : $application->co_applicant_name);

        return $this->request->merge([
            'fName' => isset($name[0]) ? $name[0] : '',
            'mName' => isset($name[1]) && isset($name[2]) ? $name[1] : '',
            'lName' => !isset($name[2]) && isset($name[1]) ? $name[1] : (isset($name[1]) && isset($name[2]) ? $name[2].(isset($name[3]) ? $name[3] : $name[0]) : $name[0]),
            'phone' => $this->request->get('applicant_type') == 1 ? $application->mobile_number : $application->co_applicant_mobile_number,
            'email' => $this->request->get('applicant_type') == 1 ? $application->email : $application->co_applicant_email,
            'pan' => $this->request->get('applicant_type') == 1 ? $application->pan_card : $application->co_applicant_pan_card
        ]);
    }

    public function saveResponse(AvanseSearchCustomer $searchCustomer, $response){
        if ($response){
            try {

                if (!isset($response->returnStatus->returnCode) || $response->returnStatus->returnCode != '0000'){
                    $searchCustomer->error = isset($response->returnStatus->returnText) ? $response->returnStatus->returnText : 'Avanse: Incomplete data found!';
                    return false;
                }

                if (isset($response->customerSearchDetails) && count($response->customerSearchDetails) == 1 && isset($response->customerSearchDetails[0])) {
                    $this->request->merge(['avanse_customer_id' => $response->customerSearchDetails[0]->cif]);
                    return (int) $response->customerSearchDetails[0]->cif;
                }else{
                    $searchCustomer->customers = $response->customerSearchDetails;
                }
            }catch (\Exception $exception){
                (new Slack(new Request(['title' => 'Request Error', 'fields' => ['response' => $response, 'request' => json_encode($this->request->all())]])))->send();
                return false;
            }
        }

        return $response;
    }

}
