<?php


namespace App\Components;


use GuzzleHttp\Client;
use phpseclib\Crypt\RSA;
use Ramsey\Uuid\Uuid;

class MomoServices
{

    public function createAppPayRequest($params)
    {

        $momoEnv = env('MOMO_ENV', 'DEV');

        //$momoEnv = 'DEV';
        $partnerCode = config('momo_service.' . $momoEnv . '.PARTNER_CODE');
        $pubKey = config('momo_service.' . $momoEnv . '.PUB_KEY');
        $devPayAppUrl = config('momo_service.' . $momoEnv . '.PAY_APP_URL');

        $partnerRefId = $params['partner_ref_id']; // mã giao dịch đối tác
        $partnerTransId = $params['partner_trans_id'];
        $customerNumber = $params['customer_number'];
        $amount = $params['amount'];
        $appData = $params['token'];
        $version = 2;
        $payType = 3;
        $description = 'Giao dịch thanh toán cho mã giao dịch ' . $partnerRefId;

        if(isset($params['description']))
        {
            $description = $params['description'];
        }

        $jsonString = [
            "partnerCode" => $partnerCode,
            "partnerRefId" => $partnerRefId,
            "partnerTransId" => $partnerTransId,
            "amount" => intval($amount),
        ];

        $sign = Functions::encryptRSA($jsonString, $pubKey);
        $client = new Client();
        $paramRequest = [
            "partnerCode" => $partnerCode,
            "customerNumber" => $customerNumber,
            "partnerRefId" => $partnerRefId,
            "appData" => $appData,
            "hash" => $sign,
            "version" => $version,
            "payType" => $payType,
            "description" => $description
        ];

        $res = $client->request('POST', $devPayAppUrl, [
            'headers' => [
                'application/json'
            ],
            'json' => $paramRequest
        ]);
        $content = $res->getBody()->getContents();

        return json_decode($content, true);
    }

    public function confirmPayApp($params)
    {

        $uuid = Uuid::uuid4();
        $momoEnv = env('MOMO_ENV', 'DEV');
        //$momoEnv = 'DEV';
        $partnerCode = config('momo_service.' . $momoEnv . '.PARTNER_CODE');
        $confirmPayAppUrl = config('momo_service.' . $momoEnv . '.CONFIRM_PAY_APP_URL');
        $secKey = config('momo_service.' . $momoEnv . '.SECRET_KEY');
        $requestId = $uuid->toString();
        $momoTransId = $params['momo_trans_id'];
        $partnerRefId = $params['partner_ref_id'];
        $requestType = $params['request_type'];
        $hashString = "partnerCode=$partnerCode&partnerRefId=$partnerRefId&requestType=$requestType&requestId=$requestId&momoTransId=$momoTransId";
        $sign = hash_hmac('sha256', $hashString, $secKey);
        $paramRequest = [
            "partnerCode" => $partnerCode,
            "partnerRefId" => $partnerRefId,
            "requestType" => $requestType,
            "requestId" => $requestId,
            "momoTransId" => $momoTransId,
            "signature" => $sign,
        ];
        if (isset($params['description'])) {
            $paramRequest['description'] = $params['description'];
        }
        $client = new Client();
        $res = $client->request('POST', $confirmPayAppUrl, [
            'headers' => [
                'application/json'
            ],
            'json' => $paramRequest
        ]);
        $content = $res->getBody()->getContents();

        return json_decode($content, true);
    }
}