<?php

namespace App;


use App\Http\Controllers\Admin\AccountingController;
use App\Http\Controllers\Admin\ConsumerApplicationController;
use App\Http\Controllers\Admin\ConsumerDocument;
use Illuminate\Http\Request;

class PreviousLoans{

    private $request;
    private $accounting;
    private $consumerController;

    public function __construct(Request $request, AccountingController $accounting){
        $this->request = $request;
        $this->accounting = $accounting;
    }


    public function getPreviousLoansV1(){

        $this->consumerController = new ConsumerApplicationController();
        $applications = $this->consumerController->isExistingCustomer($this->request->get('id'), false , ['approved','disbursement checklist done','ready for disbursement','disbursed','nach registered','closed']);

        if ($applications){
             return $this->hasHistory($this->getPreviousLoansApplicationIds());

        }
        return false;
    }

    public function getPreviousLoans(){

        $this->consumerController = new ConsumerApplicationController();
        $applications = $this->consumerController->isExistingCustomer($this->request->get('id'), false , ['approved','disbursement checklist done','ready for disbursement','disbursed','nach registered','closed']);

        if ($applications){
             return $this->hasHistory($this->getPreviousLoansApplicationIds());

        }
        return false;
    }

    public function getPreviousLoansApplicationIds(){
        $applications = ConsumerApplication::where('id',$this->request->get('id'))->orderBy('created_at','desc')->whereNull('is_deleted')->limit(1)->first([
            'pan_card', 'co_applicant_pan_card', 'email', 'co_applicant_email', 'mobile_number', 'co_applicant_mobile_number','aadhaar_card', 'co_applicant_aadhaar_card'
        ])->toArray();

        $data = [];
        foreach ($applications as $key=>$value){
            if ($value)
                $data[] = ConsumerApplication::where($key, $value)->whereNotIn('state',$this->consumerController->statusreversearray['approved'])->whereNull('is_deleted')->get();
        }

        $applicationsIds = [];
        foreach ($data as $application){
            foreach ($application as $item) {
                $applicationsIds[] = $item->id;
            }
        }

        return array_values(array_unique($applicationsIds));
    }

    public function hasHistory($applications){
        foreach ($applications as $key=>$application){
            $payment = EmiPayment::where('application_id',$application)->first(['id']);
            if (!isset($payment->id)){
                //unset($applications[$key]);
            }
        }

        $consumerDocument = new ConsumerDocument($this->request);
        $response = [];
        foreach ($applications as $application){
            $consumerApplication = ConsumerApplication::find($application);
            if ($this->request->get('id') != $application) {
                $response[] = [
                    'id' => $application,
                    'disbursed_date' => date('d M, Y', strtotime($consumerDocument->getDisbursedDate($application, 'approved'))),
                    'status' => ucwords($consumerApplication->state),
                ];
            }
        }

        return $response;
    }
}
