<?php
// paymob_payout.php
// سكريبت بي ات بي لمعاملات Paymob Payout (محفظة وبنك) بدون تخزين في قاعدة البيانات

declare(strict_types=1);
include '../../../jwtconnect.php';  // يعطيك $con، filterRequest(), printSuccess(), printFailure()

// 1) جلب باراميترات الطلب عبر filterRequest
$driverId  = filterRequest('driverID');
$amount    = filterRequest('amount');
$method    = filterRequest('method');     // 'wallet' أو 'bank'
$msisdn    = filterRequest('msisdn');
$bankCard  = filterRequest('bankCard');   // يُستعمل عند method == 'bank'
$bankCode  = filterRequest('bankCode');   // يُستعمل عند method == 'bank'

if (empty($driverId) || empty($amount) || empty($method)) {
    printFailure('Missing parameters');
    exit;
}

// 2) جلب بيانات Paymob من البيئة (Environment Variables)
$pmUser     = getenv('payMobOutUserName');
$pmPass     = getenv('payMobOutPassword');
$pmClientId = getenv('PAYMOBOUTCLIENT_ID');    // من static const pmobid
$pmSecret   = getenv('PAYMOBOUTCLIENTSECRET'); // من static const pmobsec

// 3) دالة للحصول على OAuth Token من Paymob
function fetchPaymobToken(string $user, string $pass, string $cid, string $secret): ?string {
    $ch = curl_init('https://payouts.paymobsolutions.com/api/secure/o/token/');
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => ['Content-Type: application/x-www-form-urlencoded'],
        CURLOPT_POSTFIELDS     => http_build_query([
            'grant_type'    => 'password',
            'username'      => $user,
            'password'      => $pass,
            'client_id'     => $cid,
            'client_secret' => $secret,
        ]),
    ]);
    $resp = curl_exec($ch);
    if (!$resp) return null;
    $data = json_decode($resp, true);
    return $data['access_token'] ?? null;
}

$oauthToken = fetchPaymobToken($pmUser, $pmPass, $pmClientId, $pmSecret);
if (!$oauthToken) {
    printFailure('Failed to retrieve Paymob token');
    exit;
}

// 4) دوال صرف الأموال
function disburseWallet(string $token, string $amt, string $msisdn): array {
    $ch = curl_init('https://payouts.paymobsolutions.com/api/secure/disburse/');
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => [
            "Authorization: Bearer $token",
            'Content-Type: application/json',
        ],
        CURLOPT_POSTFIELDS     => json_encode([
            'amount' => $amt,
            'issuer' => 'wallet',
            'msisdn' => $msisdn,
        ]),
    ]);
    $resp = curl_exec($ch);
    return $resp ? json_decode($resp, true) : [];
}

function disburseBank(string $token, string $amt, string $card, string $code): array {
    $ch = curl_init('https://payouts.paymobsolutions.com/api/secure/disburse/');
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => [
            "Authorization: Bearer $token",
            'Content-Type: application/json',
        ],
        CURLOPT_POSTFIELDS     => json_encode([
            'amount'                => $amt,
            'issuer'                => 'bank_card',
            'bank_card_number'      => $card,
            'bank_code'             => $code,
            'bank_transaction_type' => 'cash_transfer',
        ]),
    ]);
    $resp = curl_exec($ch);
    return $resp ? json_decode($resp, true) : [];
}

// 5) استدعاء الدالة المناسبة وتنفيذ الصرف
if ($method === 'wallet') {
    $result = disburseWallet($oauthToken, $amount, $msisdn);
} else {
    $result = disburseBank($oauthToken, $amount, $bankCard, $bankCode);
}

// 6) التحقق من نجاح الصرف وإرجاع النتيجة
if (empty($result) || ($result['disbursement_status'] ?? '') !== 'successful') {
    printFailure('Disbursement failed');
    exit;
}

// 7) إرجاع التوكن والنتيجة للعميل بدون تخزين في DB
printSuccess( $result);
?>