<?php

namespace App\Http\Controllers;

use App\apiToken;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
//\Mail::send;



class payController extends Controller
{
    //

    public function postTrans(Request $request){
        $ven=$request->input('send_vendor');


        $num=$request->input('send_number');
        $Username=$request->input('uid');
        $Password=$request->input('pass');
        $trans_prefix=$request->input('tp');
        $usercallback=$request->input('cbk');
        $amt=$request->input('amt');
        $userdescription=$request->input('msg');
        $vouchernumber=$request->input('vou');
        $transType=$request->input('transType');
        $Re_vendor=$request->input('receive_vendor');
        $Re_number=$request->input('receive_number');
//    checking vendor and numbers
        $datafromcheck= $this->checkPrefix($ven,$num);
        $datafromcheck2= $this->checkPrefix($Re_vendor,$Re_number);
        Log::useDailyFiles(storage_path().'/logs/datafromcheck/1/datafromcheck.log');
        Log::info($datafromcheck);
        Log::useDailyFiles(storage_path().'/logs/datafromcheck/2/datafromcheck.log');
        Log::info($datafromcheck2);
        //check semder no. and vender
        if ($datafromcheck[0]['status']==1){
            //check receiver no. and vendor
            if ($datafromcheck2[0]['status']==1){

                switch ($ven){
                    case "airtel":
                        $final= $this-> mainRequest($Username,$Password,$trans_prefix,$usercallback,$datafromcheck[0]['fnum'],"",$amt,$userdescription,$ven);
                        return $final;
                        break;
                    case "mtn":
                        $final=  $this->mainRequest($Username,$Password,$trans_prefix,$usercallback,$datafromcheck[0]['fnum'],"",$amt,$userdescription,$ven);
                        return $final;
                        break;
                    case "tigo":
                        $final= $this->mainRequest($Username,$Password,$trans_prefix,$usercallback,$datafromcheck[0]['fnum'],"",$amt,$userdescription,$ven);
                        return $final;
                        break;
                    case "vodafone":
                        $final= $this->mainRequest($Username,$Password,$trans_prefix,$usercallback,$datafromcheck[0]['fnum'],$vouchernumber,$amt,$userdescription,$ven);
                        return $final;
                        break;
                }
            }else{

            }
            ////
        }else{

        }
    }


    public function postpay(Request $request){
        $api_token=$request->input('api_token');

if (!empty($api_token)){
    $data=$this->apiTokenCheck($api_token);

    $Username= $data[0]['username'];
    $Password=$data[0]['password'];
    $ven=$request->input('vendor');
    $pin=$request->input('pin');
    $trans_type=$request->input('trans_type');
    $ven= strtolower($ven);
    $trans_type= strtolower($trans_type);
    $num=$request->input('number');
    $trans_id=$request->input('tp');
    $usercallback=$request->input('cbk');
    $amt=$request->input('amt');
    $userdescription=$request->input('msg');
    $vouchernumber=$request->input('vou');
//    checking vendor and numbers
    $datafromcheck= $this->checkPrefix($ven,$num);

//  proceeding to transactions
}else{
    $Username=$request->input('uid');
    $Password=$request->input('pass');
    $ven=$request->input('vendor');
    $pin=$request->input('pin');
    $trans_type=$request->input('trans_type');
    $ven= strtolower($ven);
    $trans_type= strtolower($trans_type);
    $num=$request->input('number');
    $trans_id=$request->input('tp');
    $usercallback=$request->input('cbk');
    $amt=$request->input('amt');
    $userdescription=$request->input('msg');
    $vouchernumber=$request->input('vou');
//    checking vendor and numbers
    $datafromcheck= $this->checkPrefix($ven,$num);

//  proceeding to transactions
}

if($datafromcheck[0]['status']==1){
//    valid number
    switch ($ven){
        case "airtel":
           $final= $this-> mainRequest($Username,$Password,$trans_id,$usercallback,$datafromcheck[0]['fnum'],"",$amt,$userdescription,$ven,$pin,$trans_type);
           return $final;
            break;
        case "mtn":
            $final=  $this->mainRequest($Username,$Password,$trans_id,$usercallback,$datafromcheck[0]['fnum'],"",$amt,$userdescription,$ven,$pin,$trans_type);
            return $final;
            break;
        case "tigo":
            $final= $this->mainRequest($Username,$Password,$trans_id,$usercallback,$datafromcheck[0]['fnum'],"",$amt,$userdescription,$ven,$pin,$trans_type);
            return $final;
            break;
        case "vodafone":
            $final= $this->mainRequest($Username,$Password,$trans_id,$usercallback,$datafromcheck[0]['fnum'],$vouchernumber,$amt,$userdescription,$ven,$pin,$trans_type);
            return $final;
            break;
    }
}elseif($datafromcheck[0]['status']==0){
    return response()->json($datafromcheck);
}

}

//check vendor and numbers passed to the api
public function checkPrefix($ven,$num){
    Log::useDailyFiles(storage_path().'/logs/checkPrefix/checkPrefix.log');
        Log::info($ven."|".$num);
//    checking if vendor was passed in the function
    if(!empty($ven)){
//        checking if no. was passed in the function
        if (!empty($num)){
            switch ($ven){
                case "mtn":
                    $data= $this->checkstring($num);
                    return $data;
                    break;
                case "vodafone":
                    $data= $this->checkstring($num);
                    return $data;
                    break;
                case "airtel":
                    $data= $this->checkstring($num);
                    return $data;
                    break;
                case "tigo":
                    $data= $this->checkstring($num);
                    return $data;
                    break;
            }
        }else{
            echo "no number";
        }
//        endif
    }else{
        echo "no vendor";
    }
//    endif
}

//check string length
public function checkstring($num){
    Log::useDailyFiles(storage_path().'/logs/checkstring/num/checkstring.log');
    Log::info($num);
    $res=array();

//    0550518756
//    233550518756
    $len =strlen($num);
    if ($len==10){
//        checking if 0 is in the number
       $pos= strpos($num,'0');

       if($pos==0){
           // reformatting the number
           $arr=  str_split($num);
           $fnum="233".$arr[1].$arr[2].$arr[3].$arr[4].$arr[5].$arr[6].$arr[7].$arr[8].$arr[9];
           array_push($res,['len'=>$len,'fnum'=>$fnum,'status'=>'1','msg'=>'Valid number']);
       }else{
           array_push($res,['len'=>$len,'fnum'=>null,'status'=>'0','msg'=>'Invalid number']);
       }

    }elseif ($len==12){
        $pos= strpos($num,'2');
        if($pos==0){
            $arr=  str_split($num);
            $fnum=$arr[0].$arr[1].$arr[2].$arr[3].$arr[4].$arr[5].$arr[6].$arr[7].$arr[8].$arr[9].$arr[10].$arr[11];
            array_push($res,['len'=>$len,'fnum'=>$fnum,'status'=>'1','msg'=>'Valid number']);
        }else{
            array_push($res,['len'=>$len,'fnum'=>null,'status'=>'0','msg'=>'Invalid number']);
        }

    }
//    elseif($len==13){
//        $pos= strpos($num,'+');
//        if($pos==0){
//            $arr=  str_split($num);
//            $fnum=$arr[1].$arr[2].$arr[3].$arr[4].$arr[5].$arr[6].$arr[7].$arr[8].$arr[9].$arr[10].$arr[11].$arr[12];
//            array_push($res,['len'=>$len,'fnum'=>$fnum]);
//        }else{
//            $res="Invalid number";
//        }
//
//    }
    else{
        array_push($res,['len'=>$len,'fnum'=>null,'status'=>'0','msg'=>'Invalid number']);
    }
    Log::useDailyFiles(storage_path().'/logs/checkstring/res/checkstring.log');
    Log::info($res);
    return $res;
}



//request function

    /**
     * @param $Username
     * @param $Password
     * @param $trans_id
     * @param $usercallback
     * @param $num
     * @param $vouchernumber
     * @param $amt
     * @param $userdescription
     * @param $ven
     * @param $pin
     * @param $trans_type
     * @return \Illuminate\Http\JsonResponse
     */
    public function mainRequest($Username, $Password, $trans_id, $usercallback, $num, $vouchernumber, $amt, $userdescription, $ven, $pin, $trans_type){

    error_reporting(E_ALL);
    ini_set('display_errors', 1);

    date_default_timezone_set('GMT');

    $msisdn=$num;
    $amount=$amt;
//        $voucher_number=$request->input('voucher_number');
//    $transaction_id=uniqid('GMvf_');
    $transaction_id=$trans_id;
    $timestamp=date('YmdHis');
    $description=$userdescription;
//    $user_id='npgoldmine';
//    $password='nuer184jhiw';
    $user_id=$Username;
    $password=$Password;
    //    $pin_get=$pin;
    $pin_get=  md5($user_id.$password.$timestamp);
    $callback=$usercallback;

//        $vodafoneCashUrl = "http://5.9.61.79/pay/vodafone/vapi.php";

if (empty($trans_type)){
    if ($ven=="vodafone"){
        $CashUrl = "http://5.9.61.79/pay/vodafone/vapi.php";
        $voucher_number=$vouchernumber;
        $request=array(
            'msisdn' => $msisdn,
            'amount' => $amount,
            'voucher_number'=>$voucher_number,
            'transaction_id'=>$transaction_id,
            'timestamp'=>$timestamp,
            'description'=>$description,
            'user_id'=>$user_id,
            'password'=>$password,
            'pin'=>$pin_get,
            'callback'=>$callback
        );
    }else{
        switch ($ven){
            case "mtn":
                $CashUrl = "http://5.9.86.210/pay/mtn/mapi.php";
                break;
            case "tigo":
                $CashUrl = "http://5.9.86.210/airtel/aapi.php";
//                $CashUrl = "http://5.9.86.210/pay/tigo/tapi.php";
                break;
            case "airtel":
                $CashUrl = "http://5.9.86.210/airtel/aapi.php";
//                $CashUrl = "http://5.9.86.210/pay/mtn/mapi.php";
                break;
        };
        $request=array(
            'vendor' => $ven,
            'msisdn' => $msisdn,
            'amount' => $amount,
//            'voucher_number'=>$voucher_number,
            'transaction_id'=>$transaction_id,
            'timestamp'=>$timestamp,
            'description'=>$description,
            'user_id'=>$user_id,
            'password'=>$password,
            'pin'=>$pin_get,
            'callback'=>$callback
        );
    }
    Log::useDailyFiles(storage_path().'/logs/mainRequest/notrans_type/$request.log');
    Log::info($request);
}elseif ($trans_type=="debit"){
    if ($ven=="vodafone"){
        $CashUrl = "http://5.9.61.79/pay/vodafone/vapi.php";
        $voucher_number=$vouchernumber;
        $request=array(
            'msisdn' => $msisdn,
            'amount' => $amount,
            'voucher_number'=>$voucher_number,
            'transaction_id'=>$transaction_id,
            'timestamp'=>$timestamp,
            'description'=>$description,
            'user_id'=>$user_id,
            'password'=>$password,
            'pin'=>$pin_get,
            'callback'=>$callback
        );
    }else{
        switch ($ven){
            case "mtn":
                $CashUrl = "http://5.9.86.210/pay/mtn/mapi.php";
                break;
            case "tigo":
                $CashUrl = "http://5.9.86.210/airtel/aapi.php";
//                $CashUrl = "http://5.9.86.210/pay/tigo/tapi.php";
                break;
            case "airtel":
                $CashUrl = "http://5.9.86.210/airtel/aapi.php";
//                $CashUrl = "http://5.9.86.210/pay/mtn/mapi.php";
                break;
        };
        $request=array(
            'vendor' => $ven,
            'msisdn' => $msisdn,
            'amount' => $amount,
//            'voucher_number'=>$voucher_number,
            'transaction_id'=>$transaction_id,
            'timestamp'=>$timestamp,
            'description'=>$description,
            'user_id'=>$user_id,
            'password'=>$password,
            'pin'=>$pin_get,
            'callback'=>$callback
        );
    }
    Log::useDailyFiles(storage_path().'/logs/mainRequest/debit/$request.log');
    Log::info($request);
}
elseif ($trans_type=="credit"){
    if ($ven=="vodafone"){
        $CashUrl = "http://5.9.61.79/pay/vodafone/vapi.php";
        $voucher_number=$vouchernumber;
        $request=array(
            'msisdn' => $msisdn,
            'amount' => $amount,
            'voucher_number'=>$voucher_number,
            'transaction_id'=>$transaction_id,
            'timestamp'=>$timestamp,
            'description'=>$description,
            'user_id'=>$user_id,
            'password'=>$password,
            'pin'=>$pin_get,
            'callback'=>$callback
        );
    }else{
        switch ($ven){
            case "mtn":
                $CashUrl = "http://5.9.86.210/pay/mtn/mapi.php";
                break;
            case "tigo":
                $CashUrl = "http://5.9.86.210/airtel/npontu_pay/aapi_c.php";
//                $CashUrl = "http://5.9.86.210/pay/tigo/tapi.php";
                break;
            case "airtel":
                $CashUrl = "http://5.9.86.210/airtel/npontu_pay/aapi_c.php";
//                $CashUrl = "http://5.9.86.210/pay/mtn/mapi.php";
                break;
        };
        $request=array(
            'vendor' => $ven,
            'msisdn' => $msisdn,
            'amount' => $amount,
//            'voucher_number'=>$voucher_number,
            'transaction_id'=>$transaction_id,
            'timestamp'=>$timestamp,
            'description'=>$description,
            'user_id'=>$user_id,
            'password'=>$password,
            'pin'=>$pin_get,
            'callback'=>$callback
        );
    }
    Log::useDailyFiles(storage_path().'/logs/mainRequest/credit/$request.log');
    Log::info($request);
}



    $ch = curl_init($CashUrl);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
//dd($output);
        Log::useDailyFiles(storage_path().'/logs/mainRequest/outputs/$output.log');
        Log::info($output);
       $this->NpontuMail($ven,$msisdn,$amount,$transaction_id,$timestamp,$description,$user_id,$password,$pin_get,$callback);

    if ($output=="00000-Done"){

        return response()->json(["status"=>"success","trans_id"=>$transaction_id]);

//            echo $output;
    }else{
        return response()->json(["status"=>"failed","trans_id"=>$transaction_id]);

    }

    //send email



}
public function apiTokenCheck($api_token){
$data=apiToken::join('users','api_tokens.user_id','users.id')->join('clients','users.client_id','clients.id')
    ->select('clients.username','clients.password')->where('api_tokens.project_token',$api_token)->get();

return $data;
}
//this is where am sending the email of the transaction
public function NpontuMail($ven,$msisdn,$amount,$transaction_id,$timestamp,$description,$user_id,$password,$pin_get,$callback){
 $data=array(
     'ven'=>$ven,
     'msisdn' =>$msisdn,
     'amount' => $amount,
//            'voucher_number'=>$voucher_number,
     'transaction_id'=>$transaction_id,
     'timestamp'=>$timestamp,
     'description'=>$description,
     'user_id'=>$user_id,
     'password'=>$password,
     'pin'=>$pin_get,
     'callback'=>$callback
 );
    Log::useDailyFiles(storage_path().'/logs/Requestmails/email_init/init_email.log');
    Log::info($data);

//    Mail::send('email', $data, function($m){
//        $m->from('abrahamodoi2002@gmail.com', 'NpontuPay');
//        $m->to('support@npontu.com');
//        $m->subject('Npontu Pay!');
//
//    });
}

}
