<?php
/**
 * Created by PhpStorm.
 * User: sunil
 * Date: 28/11/18
 * Time: 12:39 PM
 */

namespace App;


use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\Admin\ConsumerDocument;
use App\Logging\CloudWatchLoggerFactory;

class TelecomDetails
{


    private function karzaapi($payload,$url_endpoint){
        $endPointDevelopment = "https://api.karza.in/v2/mobile/".$url_endpoint;
        $karza_key = (_env('KARZAKEY', ''));
        //$karza_key =  "XVC3ByYPMj1gTS0O";

        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => $endPointDevelopment,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => $payload,
            CURLOPT_HTTPHEADER => array(
                'Content-Type: application/json',
                'cache-control: no-cache',
                'x-karza-key: '.$karza_key
            ),
        ));

        $response = curl_exec($curl);
        $err = curl_error($curl);
        $cwFactory = new CloudWatchLoggerFactory();
        $data = array('user_id'=> Auth::user()->id, 'vendor'=> 'Karza', 'api_url' => $endPointDevelopment,'Request'=> $payload ?? '{}', 'Response'=>json_decode($response, 1) ?? '', 'error_msg' => isset($err) ? json_decode($err, 1) : '');
        $cwFactory->logger(json_encode($data));
        if ($err) {
            return false;
        } else {
            return $response;
        }
    }

    public function generateOtp($mobile_number){
        return false;
        $time = time();
        $payload = json_encode(array("mobile"=>$mobile_number,"consent"=>"y"));
        $response = $this->karzaapi($payload,"otp");
        try {
            if (1 == _env("APP_CONNECTION")) {
                $fln = 'partner/karza/karza_generate_otp_'.$time.'.json';
                ConsumerDocument::uploadToS3TempOnly($fln, json_encode(['response' =>$response, 'requests' => $payload]));
            }
        } catch(\Exception $e){

        }
        // try {
        //     $fp = fopen('karza_generate_otp_' . $time . '.json', 'w');
        //     fwrite($fp, json_encode(['response' => $response, 'requests' => $payload]));
        //     fclose($fp);
        // }catch (\Exception $e){

        // }

        if($response == false){
            return false;
        }else{
            $response = json_decode($response,true);
            if(isset($response['status-code']) && $response['status-code'] == "101"){
                return $response;
            }else{
                return false;
            }
        }
    }


    public function verifyOtp($request_id,$otp,$application_id = "",$mobile_number){
        $time = time();
        $payload_status = json_encode(array("request_id"=>$request_id,"otp"=>$otp));
        $response_status = $this->karzaapi($payload_status,"status");
        try {
            if (1 == _env("APP_CONNECTION")) {
                $fln = 'partner/karza/karza_mobile_status_'.$time.'.json';
                ConsumerDocument::uploadToS3TempOnly($fln, json_encode(['response' =>$response_status, 'requests' => $payload_status]));
            }
        }catch (\Exception $e){

        }

        // try {
        //     $fp = fopen('karza_mobile_status_' . $time . '.json', 'w');
        //     fwrite($fp, json_encode(['response' => $response_status, 'requests' => $payload_status]));
        //     fclose($fp);
        // }catch (\Exception $e){

        // }

        if($response_status == false){
            return false;
        }else{
            $response_status = json_decode($response_status,true);
            if(isset($response_status['status-code']) && $response_status['status-code'] == "101"){
                $payload_details = json_encode(array("request_id"=>$request_id));
                $otp_status = isset($response_status['result']['sim_details']['otp_validated']) ? $response_status['result']['sim_details']['otp_validated'] : false;
                if($otp_status == false){
                    return false;
                }
                $response_details = $this->karzaapi($payload_details,"details");
                try {
                    if (1 == _env("APP_CONNECTION")) {
                        $fln = 'partner/karza/karza_mobile_details_'.$time.'.json';
                        ConsumerDocument::uploadToS3TempOnly($fln, json_encode(['response' =>$response_details, 'requests' => $payload_details]));
                    }
                }catch (\Exception $e){

                }


                // try {
                //     $fp = fopen('karza_mobile_details_' . $time . '.json', 'w');
                //     fwrite($fp, json_encode(['response' => $response_details, 'requests' => $payload_details]));
                //     fclose($fp);
                // }catch (\Exception $e){

                // }
                if($response_details == false){
                    return false;
                }
                else {
                    TelecomData::where('mobile_number', $mobile_number)->delete();
                    $telecomData = new TelecomData();
                    $telecomData->mobile_number = $mobile_number;
                    $telecomData->telecom_response = json_encode($response_details);
                    $telecomData->save();
//                    if ($application_id != "") {
//                        ConsumerApplicationElement::where('application_id', $application_id)->update(['telecom_response' => json_encode($response_details)]);
//                    }
                    return $response_details;
                }
            }else{
                return false;
            }
        }
    }
}
