<?php

namespace App\Http\Controllers;

use App\Merchants;
use App\OrderDetails;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

class MerchantsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index($order_id)
    {
        if (session()->has('token')) {
            if (!empty(session()->get('token'))) {
                $merchant=Merchants::where('token',session()->get('token'))->first();
                if (!empty($merchant)){
                    $order=OrderDetails::where("productinfo",$order_id)->where("merchant_id",$merchant->id)->first();
                    if (!empty($order)){
                        return view("payments.pay_init",compact('order'));
                    }else{
                        abort(404);
                    }

                }else{
                    abort(404);
                }

            } else {
                dd("dead1");
            }
        } else {
            dd("dead", session()->get('token'));
        }
        //

    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
//        Log::useDailyFiles(storage_path().'/logs/pay/pay.log');
//        Log::info($request);
        $date=date("ds");
        $merchant = Merchants::where('token', $request->token)->first();
        if (!empty($merchant)) {
            $this->validate($request, [
                "transaction_id" => "required",
                "description" => "required",
                "user_id" => "required",
                "password" => "required",
                "redirect_url" => "required",
                "productinfo" => "required",

                "merchant_site_name" => "required",
                "merchant_site_uri" => "required",
                "billing_email" => "required",
                "total" => "required"
            ]);
$Old_order=OrderDetails::where("productinfo",$request->productinfo)
    ->where("merchant_id",$merchant->id)
    ->where("is_paid",false)
    ->first();
if (empty($Old_order) ){
    $order = OrderDetails::create(array_merge($request->all(), ['merchant_id' => $merchant->id]));
    $res=array("token"=>$request->token,"trans_id"=>$order->transaction_id,"order_id"=>$order->productinfo);

}else{
    $Old_order->user_id=$request->user_id;
    $Old_order->password=$request->password;
    $Old_order->total=$request->total;
    $Old_order->transaction_id=$request->transaction_id."|".$date;
    $Old_order->save();
    $res=array("token"=>$request->token,"trans_id"=>$Old_order->transaction_id,"order_id"=>$Old_order->productinfo);

}
            return response()->json($res);
        }

    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Merchants $merchants
     * @return \Illuminate\Http\Response
     */
    public function show(Merchants $merchants)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Merchants $merchants
     * @return \Illuminate\Http\Response
     */
    public function edit(Merchants $merchants)
    {
        $url='http://pay.npontu.com/api/plugin/merchant/create';
        $request = array(
            "transaction_id" =>"transaction_id",
            "description" =>"description",
            "user_id" =>"user_id",
            "password" =>"password",
            "redirect_url" =>"redirect_url",
            "productinfo" =>"productinfo",
            "token" =>"12",
            "merchant_site_name" =>"merchant_site_name",
            "merchant_site_uri" =>"merchant_site_uri",
            "billing_email" =>"billing_email",
            "total" =>"total"
        );
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
$mel= json_decode($output);
echo $mel->order_id;
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \App\Merchants $merchants
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Merchants $merchants)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Merchants $merchants
     * @return \Illuminate\Http\Response
     */
    public function destroy(Merchants $merchants)
    {
        //
    }

    public function checkMerchant($token,$order_id)
    {

        $merchant = Merchants::where('token', $token)->first();
        if ($merchant == null) {
            dd("mel");
        } else {
            session()->put("token", $merchant->token);

            return redirect()->route('plugin.index',$order_id);
        }

    }

    public function postRequest(Request $request){

        if ($request->input('buyer_vendor'=="vodafone")){
            $this->validate($request,[
                "buyer_vendor"=>"required",
                "m_number"=>"required",
                "voucher"=>"required",
            ]);
        }else{
            $this->validate($request,[
                "buyer_vendor"=>"required",
                "m_number"=>"required",
            ]);
        }
        $order=OrderDetails::where("productinfo",$request->order_id)
            ->where("total",$request->amount)
            ->where("is_paid",false)
            ->first();
       if (!empty($order)){

           $paymentEndpoint =
               "http://pay.npontu.com/api/pay";
           $callbackResponseUrl =
               "http://pay.npontu.com/api/plugin/merchant/update";
           $vou=$request->input('voucher');
           if (!empty($vou)){
               $request=array(
                   'number' => $request->input('m_number'),
                   'vendor' => $request->input('buyer_vendor'),
                   'uid'=> $order->user_id,
                   'pass'=>$order->password,
                   'tp'=>$order->transaction_id,
                   'cbk'=>$callbackResponseUrl,
                   'amt'=>$order->total,
                   'msg'=>$order->description,
                   'vou'=>$request->input('voucher'),
                   'trans_type'=>'debit'
               );
           }else{
               $request=array(
                   'number' => $request->input('m_number'),
                   'vendor' => $request->input('buyer_vendor'),
                   'uid'=> $order->user_id,
                   'pass'=>$order->password,
                   'tp'=>$order->transaction_id,
                   'cbk'=>$callbackResponseUrl,
                   'amt'=>$order->total,
                   'msg'=>$order->description,
                   'trans_type'=>'debit'
               );
           }
           Log::useDailyFiles(storage_path().'/logs/request/request.log');
           Log::info($request);

           $ch = curl_init($paymentEndpoint);
           curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
           $output = curl_exec($ch);
           Log::useDailyFiles(storage_path().'/logs/trans/trans.log');
           Log::info($output);
//           error_log($output, 3, storage_path("/var/tmp/my-errors.log"));
           $data=json_decode($output, true);
//           dd($output);
           if ($data['status']=="success"){
               $order->trans_status="pending";
               $order->save();
               $data1=$data['trans_id'];
               return redirect()->route('plugin.final',$order->productinfo);
           }else{

               return redirect()->back()->withErrors("Could not process transaction at the moment, check details and try again");
           }


       }else{
           return redirect()->back()->withErrors("Order Not Found");
       }

    }

    public function updateRequest(Request $request){
        $this->validate($request,["transaction_id"=>"required",
            "status"=>"required",
            ]);
        $transaction_id=$request->input('transaction_id');
        $responseMessage=$request->input('responseMessage');
        $status=$request->input('status');
        $order = OrderDetails::where('transaction_id',$transaction_id)->first();

        $order->trans_status=$status;
if ($status=="success"){
    $order->is_paid=true;
}
        $order->save();
//        if (strtolower($status)=="success"){
//            $message='Your Account on Auction GH has be credited with Gh₵ '.$updatemobilemoney->amount;
//            $to=$updatemobilemoney->msisdn;
//            return redirect()->route('smsmessage',['to'=>$to,'msg'=>$message]);
//        }


    }

    public function confirmation($order_id){
        $order=OrderDetails::where("productinfo",$order_id)
            ->where("is_paid",false)
            ->first();
if (!empty($order)){
    return view("payments.pay_confirm",compact("order"));
}else{
    return redirect()->back()->withErrors("Order Not Found");
}
    }

    public function checkPayment($order_id){
        $order=OrderDetails::find($order_id);
        $data=(object)['status'=>strtolower($order->trans_status),'paid'=>$order->is_paid,'trans_id'=>$order->transaction_id];
return response()->json($data);
    }


}
