<?php

namespace App\Http\Controllers\Admin\Project;

use App\Avanse\Processes\AvanseProcesses;
use App\Avanse\Services\AvanseServices;
use App\ConsumerApplication;
use App\Http\Controllers\Admin\ConsumerApplicationController;
use App\Http\Controllers\ApiController;
use App\Http\Controllers\Controller;
use App\Lenders;
use App\Mandate;
use App\Merchant;
use App\MerchantLocation;
use App\NachSupportedBank;
use App\NegativeProfile;
use App\PaymentTransaction;
use App\StatusLogs;
use App\TelecomData;
use App\User;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;

class BNPLApplicationController extends Controller{

    const NUM_OF_RECORDS_PER_PAGE = 10;

    public function __construct()
    {
//        $this->status = ['incomplete' => 'incomplete', 'form completed' => 'form completed', 'in-process' => 'in-process','waiting for documents' => 'waiting for documents','waiting for decision' => 'waiting for decision', 'approved' => 'approved', 'disbursement checklist done' => 'disbursement checklist done', 'ready for disbursement' => 'ready for disbursement', 'disbursed' => 'disbursed','cancellation in-process' => 'cancellation in-process','cancelled' => 'cancelled', 'nach registered' => 'nach registered', 'closed' => 'closed', 'rejected' => 'rejected', 'aborted' => 'aborted'];
//
//        $this->statusarray = array('incomplete form' => array('form completed', 'rejected', 'aborted'), 'form completed' => array('in-process', 'rejected', 'aborted'), 'in-process' => array('waiting for documents', 'waiting for decision', 'rejected', 'aborted'), 'waiting for documents' => array('waiting for decision','in-process', 'rejected', 'aborted'), 'waiting for decision' => array('waiting for documents','in-process', 'rejected', 'aborted'), 'approved' => array('disbursement checklist done', 'rejected', 'aborted'), 'disbursement checklist done' => array('approved', 'rejected', 'aborted'), 'ready for disbursement' => array('disbursement checklist done', 'rejected', 'aborted'), 'disbursed' => array('nach registered','closed','cancellation in-process'),'cancellation in-process'=>array('cancelled'),'cancelled' => array(), 'nach registered' => array('closed','cancellation in-process'), 'closed' => array(), 'rejected' => array('in-process'), 'aborted' => array('in-process'));
//
//        $this->arraygroup = array('incomplete form' => 'form completed', 'form completed' => 'form completed', 'in-process' => 'in-process', 'waiting for documents' => 'in-process', 'waiting for decision' => 'in-process', 'approved' => 'approved', 'disbursement checklist done' => 'approved', 'ready for disbursement' => 'approved', 'disbursed' => 'disbursed', 'nach registered' => 'nach registered', 'closed' => 'closed', 'cancellation in-process'=> 'cancelled','cancelled' => 'cancelled', 'rejected' => 'rejected', 'aborted' => 'aborted');
//
//        $this->helptext = array('incomplete form' => 'Form Completed ->In Process', 'form completed' => 'In Process', 'in-process' => 'Gather Documents ->Complete Verification Checklist', 'waiting for documents' => 'Gather Documents -> Complete Verification Checklist', 'waiting for decision' => 'Get Decision From Credit Team','approved' => 'Get Agreement Signed ->Get Nach Registered ->Pro-Forma ->disbursement checklist done', 'disbursement checklist done' => 'Get Disbursement Approval', 'ready for disbursement' => 'Get Disbursed', 'disbursed' => 'Get Nach Activated','nach registered' => 'Keep a track of EMI', 'closed' => 'Keep it touch for more services', 'rejected' => 'Return to In process?', 'aborted' => 'Return to In process?','cancelled' => 'Refunded or Cancelled by Merchant','cancellation in-process' =>  "Co-ordinate with merchant for cancellation");
//        $this->pendingDoc = array('in-process' => ['Bureau' => 'equifax_report', 'Pan'=>'pan_card', 'Pan Valid'=>'panvalidation', 'Add'=>'address', 'Tenure'=>'foir', 'Co-applicant Income' => 'co_applicant_for_income', 'Co-applicant Sign' => 'co_applicant_for_signing'], 'waiting for documents' => ['Bureau' => 'equifax_report', 'Pan'=>'pan_card', 'Pan Valid'=>'panvalidation', 'Add'=>'address', 'Tenure'=>'foir', 'Co-applicant Income' => 'co_applicant_for_income', 'Co-applicant Sign' => 'co_applicant_for_signing'], 'approved' => ['Bank Valid'=>'bank_details', 'Sign Proforma'=>'proforma', 'Nach'=>'nach', 'Chq'=>'security_cheques', 'E-Sign'=>'agreement'], 'disbursed' => ['courier'=>'courier','Reg Nach'=>'reg_nach'], 'waiting for decision'=>['pending decision'=>'pending_decision']);
//
//        $this->statusreversearray = array('incomplete form' => array(''), 'form completed' => array('incomplete form'), 'in-process' => array('form completed', 'incomplete form', 'rejected', 'aborted'), 'waiting for documents' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process'), 'waiting for decision' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents'), 'approved' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision'), 'disbursement checklist done' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved'), 'ready for disbursement' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved','disbursement checklist done'),'disbursed' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved','disbursement checklist done','ready for disbursement','cancelled','cancellation in-process'),'nach registered' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved','disbursement checklist done','ready for disbursement','disbursed','cancelled','cancellation in-process'), 'closed' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved','disbursement checklist done','ready for disbursement','disbursed','nach registered','cancelled','cancellation in-process'),'rejected' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved','disbursement checklist done','ready for disbursement','cancelled','cancellation in-process'), 'aborted' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved','disbursement checklist done','ready for disbursement','cancelled','cancellation in-process'), 'cancelled' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved','disbursement checklist done','ready for disbursement','disbursed','nach registered','cancelled','closed','cancellation in-process'), 'cancellation in-process' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved','disbursement checklist done','ready for disbursement','disbursed','nach registered','closed','cancellation in-process'));
//          $this->DocsStatus = ['waiting for decision' => ['equifax_report', 'pan_card', 'panvalidation', 'address', 'foir'], 'approved' => ['approved_amount'], 'disbursement checklist done' => ['generate_emi', 'sanction_letter', 'pro_forma_invoice', 'agreement', 'nach','proforma','bank_details','security_cheques']];

        $this->status = ['incomplete' => 'incomplete', 'form completed' => 'form completed', 'in-process' => 'in-process', 'waiting for documents' => 'waiting for documents', 'waiting for decision' => 'waiting for decision', 'cf approved' => 'cf approved', 'approved' => 'approved', 'disbursement checklist done' => 'disbursement checklist done', 'ready for disbursement' => 'ready for disbursement', 'disbursed' => 'disbursed', 'cancellation in-process' => 'cancellation in-process', 'cancelled' => 'cancelled', 'nach registered' => 'nach registered', 'closed' => 'closed', 'rejected' => 'rejected', 'aborted' => 'aborted', 'pre approved' => 'pre approved'];

        $this->statusarray = array('incomplete form' => array('form completed', 'rejected', 'aborted'), 'form completed' => array('in-process', 'rejected', 'aborted'), 'in-process' => array('waiting for documents', 'waiting for decision', 'rejected', 'aborted'), 'waiting for documents' => array('waiting for decision', 'in-process', 'rejected', 'aborted'), 'waiting for decision' => array('waiting for documents', 'in-process', 'rejected', 'aborted', 'pre approved', 'cf approved'), 'pre approved' => array('waiting for documents', 'in-process', 'rejected', 'aborted'), 'cf approved' => array('disbursement checklist done', 'rejected', 'aborted'), 'approved' => array('disbursement checklist done', 'rejected', 'aborted'), 'disbursement checklist done' => array('approved', 'rejected', 'aborted'), 'ready for disbursement' => array('disbursement checklist done', 'rejected', 'aborted'), 'disbursed' => array('nach registered', 'closed', 'cancellation in-process'), 'nach registered' => array('closed', 'cancellation in-process', 'disbursed'), 'closed' => array(), 'cancellation in-process' => array('cancelled'), 'cancelled' => array(), 'rejected' => array('in-process'), 'aborted' => array('in-process'));

        $this->arraygroup = array('incomplete form' => 'form completed', 'form completed' => 'form completed', 'in-process' => 'in-process', 'waiting for documents' => 'in-process', 'waiting for decision' => 'in-process', 'pre approved' => 'pre approved' ,'cf approved' => 'approved', 'approved' => 'approved', 'disbursement checklist done' => 'approved', 'ready for disbursement' => 'approved', 'disbursed' => 'disbursed', 'nach registered' => 'nach registered', 'closed' => 'closed', 'cancellation in-process' => 'cancelled', 'cancelled' => 'cancelled', 'rejected' => 'rejected', 'aborted' => 'aborted');

        $this->helptext = array('incomplete form' => 'Form Completed ->In Process', 'form completed' => 'In Process', 'in-process' => 'Gather Documents ->Complete Verification Checklist', 'waiting for documents' => 'Gather Documents -> Complete Verification Checklist', 'waiting for decision' => 'Get Decision From Credit Team', 'approved' => 'Get Agreement Signed ->Get Nach Registered ->Pro-Forma ->disbursement checklist done', 'disbursement checklist done' => 'Get Disbursement Approval', 'ready for disbursement' => 'Get Disbursed', 'disbursed' => 'Get Nach Activated', 'nach registered' => 'Keep a track of EMI', 'closed' => 'Keep it touch for more services', 'rejected' => 'Return to In process?', 'aborted' => 'Return to In process?', 'cancelled' => 'Refunded or Cancelled by Merchant', 'cancellation in-process' => "Co-ordinate with merchant for cancellation", 'pre approved' => 'Gather Documents ->Complete Verification Checklist->Approve');

        $this->pendingDoc = array('in-process' => ['Bureau' => 'equifax_report', 'Pan' => 'pan_card', 'Pan Valid' => 'panvalidation', 'Add' => 'address', 'Tenure' => 'foir', 'Co-applicant Income' => 'co_applicant_for_income', 'Co-applicant Sign' => 'co_applicant_for_signing'], 'waiting for documents' => ['Bureau' => 'equifax_report', 'Pan' => 'pan_card', 'Pan Valid' => 'panvalidation', 'Add' => 'address', 'Tenure' => 'foir', 'Co-applicant Income' => 'co_applicant_for_income', 'Co-applicant Sign' => 'co_applicant_for_signing'], 'approved' => ['Bank Valid' => 'bank_details', 'Sign Proforma' => 'proforma', 'Nach' => 'nach', 'Chq' => 'security_cheques', 'E-Sign' => 'agreement', 'Pan Card' => 'pan_card'], 'disbursed' => ['courier' => 'courier', 'Reg Nach' => 'reg_nach'], 'waiting for decision' => ['pending decision' => 'pending_decision']);

        $this->statusreversearray = array('incomplete form' => array(''), 'form completed' => array('incomplete form'), 'in-process' => array('form completed', 'incomplete form', 'rejected', 'aborted'), 'waiting for documents' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process'), 'waiting for decision' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents'), 'cf approved' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'pre approved'), 'approved' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'pre approved','cf approved'), 'pre approved' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision'), 'disbursement checklist done' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved', 'pre approved'), 'ready for disbursement' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved', 'disbursement checklist done', 'pre approved'), 'disbursed' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved', 'disbursement checklist done', 'ready for disbursement', 'cancelled', 'cancellation in-process', 'pre approved'), 'nach registered' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved', 'disbursement checklist done', 'ready for disbursement', 'disbursed', 'cancelled', 'cancellation in-process', 'pre approved'), 'closed' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved', 'disbursement checklist done', 'ready for disbursement', 'disbursed', 'nach registered', 'cancelled', 'cancellation in-process', 'pre approved'), 'rejected' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved', 'disbursement checklist done', 'ready for disbursement', 'cancelled', 'cancellation in-process', 'pre approved'), 'aborted' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved', 'disbursement checklist done', 'ready for disbursement', 'cancelled', 'cancellation in-process'), 'cancelled' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved', 'disbursement checklist done', 'ready for disbursement', 'disbursed', 'nach registered', 'cancelled', 'closed', 'cancellation in-process', 'pre approved'), 'cancellation in-process' => array('form completed', 'incomplete form', 'rejected', 'aborted', 'in-process', 'waiting for documents', 'waiting for decision', 'approved', 'disbursement checklist done', 'ready for disbursement', 'disbursed', 'nach registered', 'closed', 'cancellation in-process', 'pre approved'));

        $this->DocsStatus = ['waiting for decision' => ['equifax_report', 'pan_card', 'panvalidation', 'address', 'foir'], 'approved' => ['approved_amount'], 'disbursement checklist done' => ['pan_card','generate_emi', 'sanction_letter', 'pro_forma_invoice', 'agreement', 'nach', 'proforma', 'bank_details', 'security_cheques','insurance_payment_receipt','advance_amount_receipt']];
    }

    public function index(Request $request)
    {
        $requests = $request;
        $requests->request->add(['application_type'=> 'bnpl']);
        return (new ConsumerApplicationController())->index($requests);
    }

    // Load page for new application
    public function create()
    {
        $data = (new ConsumerApplicationController())->create(false, true);
        if(!$data){
            Session::flash('error', 'You don\'t have permission to access the page');
            return \redirect()->to('/admin');
        }
        return view('admin.bnpl-application.edit', $data);
    }

    // Save a new application Currently using ConsumerApplicationController()->store()
    public function store(Request $request)
    {
        return (new ConsumerApplicationController())->store($request);
    }

    // Load page for existing application
    public function edit($request)
    {
        return (new ConsumerApplicationController())->edit($request, true);
    }

    // Save updates on existing application Currently using ConsumerApplicationController()->getEditPostConsumerApplication()
    public function saveUpdate(Request $request, $id)
    {
        return (new ConsumerApplicationController())->getEditPostConsumerApplication($request, $id);
    }
}
