<?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\AvanseCreateDocument;
use App\AvanseCreateFinance;
use App\ConsumerApplicationFiles;
use Illuminate\Http\Request;
use App\Slack;

class AvanseDeleteDocument
{

    public $error = 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 [
            "finReference" => $this->request->get('fin_reference_id'),
            "docCategory" => $this->request->get('doc')
        ];
    }

    public function customerService(){

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

        $avanseFinance = AvanseCreateCustomer::where('application_id', $this->request->get('id'))->first(['id', 'cif']);
        if (!isset($avanseFinance->id)){
            $this->error[] = 'Please create loan for avanse before creating disbursement instruction';
            return false;
        }

        return [
            "cif" => $avanseFinance->cif,
            "docCategory" => $this->request->get('doc')
        ];
    }

    private function dataInitialize(){

        $avanseCreateDocument = AvanseCreateDocument::where('consumer_application_file_id', $this->request->get('consumer_application_file_id'))->first(['id']);
        if (!isset($avanseCreateDocument->id)){
            $this->error[] = 'Avanse:Document not found';
            return false;
        }

        $avanseFinance = AvanseCreateFinance::where('application_id', $this->request->get('id'))->first(['id', 'finReference']);
        if (!isset($avanseFinance->id)){
            $this->error[] = 'Please create loan for avanse before creating disbursement instruction';
            return false;
        }

        $application = ConsumerApplicationFiles::where('id', $this->request->get('consumer_application_file_id'))->first(['id','file_type']);


        $doc = null;
        foreach ((new AvanseProcesses($this->request))->documentMapped as $mainKey => $mappedArray) {
            if(in_array($application->file_type, array_values($mappedArray))){
                $doc = $mainKey;
                break;
            }
        }

        if (!$doc){
            $this->error[] = 'Avanse:Document not found';
            return false;
        }

        return $this->request->merge([
            'fin_reference_id' => $avanseFinance->finReference,
            'doc' => $doc
        ]);
    }

    public function saveResponse(AvanseDeleteDocument $avanseDeleteDocument, $response){
        if ($response){
            try {
                if (!isset($response->returnCode) || $response->returnCode != '0000'){
                    $avanseDeleteDocument->error = isset($response->returnText) ? $response->returnText : 'Avanse: Incomplete data found!';
                    return false;
                }

                if (isset($response->returnText) && $response->returnText == 'Success'){
                    return 1;
                }

            }catch (\Exception $exception){
                (new Slack(new Request(['title' => 'Request Error', 'fields' => ['response' => $response, 'request' => json_encode($this->request->all())]])))->send();
                return false;
            }
        }

        return $response;
    }

}
