<?php

namespace App\Http\Controllers\Admin;

use App\APIWrapper\Wrapper;
use App\Http\Controllers\Controller;
use App\Method\Decentro\DecentroMethods;
use Illuminate\Http\Request;
use App\DecentroCkyc;
use Illuminate\Support\Carbon;

class DecentroController extends Controller{

    private $request;

    public function __construct(Request $request){

        $this->request = $request;
    }

    public function callCkyc(){

        $wrapper = new Wrapper();
        $wrapperMethods = $wrapper->register(DecentroMethods::class);
        $wrapper->payload->addPayload(new Request(['id' => $this->request->get('id'), 'pan'=>$this->request->get('pan'), 'dob'=>$this->request->get('dob')]));
        $ckycid='';
        DecentroCkyc::where('Pan', $this->request->get('pan'))->where('DOB',$this->request->get('dob'))->where('application_id', '=', null)->whereDate('created_at','<', date('Y-m-d'))->delete();
        //$DecentroCkyc = DecentroCkyc::where('Pan', $this->request->get('pan'))->where('DOB',$this->request->get('dob'))->first(['id','ckyc_id','responseDownload']);
        //if (!isset($DecentroCkyc->id)) {
            $wrapperRes = $wrapperMethods->ckycSearch($wrapper);
            if (!$wrapperRes->errorBag){
                $ckycid = $wrapperRes->response->data->kycResult->ckycId;
            }
            if($wrapperRes->errorBag){
                return response()->json(['status' => 'FAIL', 'data' => array_filter($wrapperRes->errorBag)]);
            }
        //}else{
            //$ckycid = $DecentroCkyc->ckyc_id;
        //}
        $updatedDate = $wrapperRes->response->data->kycResult->updatedDate;
        $date1 = Carbon::parse($updatedDate);
        $today = Carbon::now()->endOfDay()->toDateTimeString();
        $date2 = Carbon::parse($today);
        $diffDays = $date1->diffInDays($date2);
        if($diffDays > 365){
            $updateDateMsg = "CKYC Document is older than 1 year";
        }else{
            $updateDateMsg = "";
        }
        //if(empty($DecentroCkyc->responseDownload) || $DecentroCkyc->responseDownload == null){
            $wrapper->payload->addPayload(new Request(['id' => $this->request->get('id'),'ckycid'=>$ckycid,'dob'=>$this->request->get('dob')]));
            $wrapperRes = $wrapperMethods->ckycDownload($wrapper);
            if(!$wrapperRes->errorBag){
                return response()->json(['status' => 'OK', 'updateDateMsg'=>$updateDateMsg , 'data' => $wrapperRes]);
            }
            return response()->json(['status' => 'FAIL', 'data' => array_filter($wrapperRes->errorBag)]);
        //}else{
           // return response()->json(['status' => 'FAIL', 'data' => ['message'=>'Already fetch ckyc']]);
       // }
    }

    public function getBankName(Request $request)
    {
        $response = array();
        $ifsc_code = $request->input_ifsc_code;
        $token =  _env('DECENTRO_BANK_TOKEN');
        $bank_details = _env('BANK_DETAILS_URL');
        $data = ['ifsc_code' => $this->request->get('ifsc_code')];
        $url = $bank_details.$ifsc_code.'?token='.$token;
        $curl = curl_init();

        curl_setopt_array($curl, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'GET',
        CURLOPT_HTTPHEADER => array(
            "Content-Type: application/json",
        ),
        ));
        $result = curl_exec($curl);
        $err = curl_error($curl);
        curl_close($curl);
        $arr = json_decode($result);
        $response['status'] = !empty($arr) && isset($arr->status) ? $arr->status : "";
        if($response['status'] == 'valid'){
            $response['branch'] = $arr->data->branch;
            $response['bank'] = $arr->data->bank;
        }
        return $response;
    }

    public function getAadharMobileLinkStatus(Request $request)
    {
        $headers = [
            'client_id' => _env('DECENTRO_CLIENT_ID'),
            'client_secret' => _env('DECENTRO_CLIENT_SECRET'),
            'module_secret' => _env('DECENTRO_MODULE_SECRET'),
            'Content-Type' => 'application/json'
        ];
    
        $data = [
            'reference_id' => $request->get('reference_id'),
            'consent' => $request->get('consent'),
            'purpose' => $request->get('purpose'),
            'aadhaar_number' => $request->get('aadhaar_number')
        ];
    
        $url = _env('DECENTRO_PAN_HOST')."/v2/kyc/aadhaar/verify";
    

        $httpHeaders = [];
        foreach ($headers as $key => $value) {
            $httpHeaders[] = "$key: $value";
        }

        $curl = curl_init();
        curl_setopt_array($curl, [
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS => json_encode($data),
            CURLOPT_HTTPHEADER => $httpHeaders
        ]);
    
        $response = curl_exec($curl);
        $error = curl_error($curl);
        curl_close($curl);
    
        if ($error) {
            return false;
        }
       
        $result = json_decode($response);
        return $result ?: false;
    }    
    
}
