<?php
include "../../../jwtconnect.php";

// 1. احصل على AUTH TOKEN
$api_key = getenv("payMobApiKey1");
$integration_id = getenv("paymobIntegratedIdWallet");
$email = filterRequest("email");
$first_name = filterRequest("first_name");
$last_name = filterRequest("last_name");
$phone_number = filterRequest("phone_number");
$wallet_phone = filterRequest("phone_number");
$amount = filterRequest("amount");

$auth_url = "https://accept.paymob.com/api/auth/tokens";
$auth_data = json_encode(["api_key" => $api_key]);

$response = callAPI("POST", $auth_url, $auth_data);
$auth_token = $response->token ?? null;
if (!$auth_token) {
    error_log("❌ فشل الحصول على AUTH TOKEN!");
    die("❌ فشل الحصول على AUTH TOKEN!");
}

// 2. أنشئ الطلب ORDER
$order_url = "https://accept.paymob.com/api/ecommerce/orders";
$order_data = [
    "auth_token" => $auth_token,
    "delivery_needed" => false,
    "amount_cents" => $amount,
    "currency" => "EGP",
    "merchant_order_id" => uniqid(),
    "items" => []
];

$response = callAPI("POST", $order_url, json_encode($order_data));
$order_id = $response->id ?? null;
if (!$order_id) {
    error_log("❌ فشل إنشاء الطلب!");
    die("❌ فشل إنشاء الطلب!");
}
//  error_log("orde is" .$order_id);
// 3. احصل على Payment Key

$payment_key_url = "https://accept.paymob.com/api/acceptance/payment_keys";
$payment_key_data = [
    "auth_token" => $auth_token,
    "amount_cents" => $amount,
    "expiration" => 3600,
    "order_id" => $order_id,
    "billing_data" => [
        "first_name" => $first_name,
        "last_name" => $last_name,
        "email" => $email,
        "phone_number" => $phone_number,
        "country" => "EG",
        "city" => "Cairo",
        "state" => "shobra",
        "street" => "Test St.",
        "building" => "1",
        "apartment" => "10",
        "floor" => "2",
        "postal_code" => "12345",
        "shipping_method" => "wallet"
    ],
    "currency" => "EGP",
    "integration_id" => $integration_id // إذا كان مضبوط
];
$response = callAPI("POST", $payment_key_url, json_encode($payment_key_data));
$payment_token = $response->token ?? null;
//  error_log("payment_token is" .$payment_token);
if (!$payment_token) {
    error_log("❌ فشل الحصول على PAYMENT TOKEN!");
    
    die("❌ فشل الحصول على PAYMENT TOKEN!");
}
// error_log("phone wallet is ".$wallet_phone);
// 4. الدفع عبر المحفظة Wallet
$redirect_url = payWithWallet($payment_token, $wallet_phone);
if ($redirect_url) {
    printSuccess($redirect_url);
    error_log("redirect_url is" .$redirect_url);
} else {
    error_log("❌ فشل الدفع عبر المحفظة!");
     printFailure("Payment verified, but failed to generate token.");
    // die("❌ فشل الدفع عبر المحفظة!");
}

// دالة لطلب API عبر CURL
function callAPI($method, $url, $data)
{
    $curl = curl_init();

    curl_setopt_array($curl, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => $method,
        CURLOPT_POSTFIELDS => $data,
        CURLOPT_HTTPHEADER => ["Content-Type: application/json"]
    ]);

    $response = curl_exec($curl);
    curl_close($curl);

    return json_decode($response);
}

// الدالة الخاصة بالدفع بالمحفظة
function payWithWallet($paymentToken, $walletPhone)
{
    $url = "https://accept.paymob.com/api/acceptance/payments/pay";

    $data = [
        "source" => [
            "identifier" => $walletPhone,
            "subtype" => "WALLET"
        ],
        "payment_token" => $paymentToken
    ];

    // Log the full data being sent to Paymob
    // error_log("Data being sent to Paymob: " . json_encode($data));

    $response = callAPI("POST", $url, json_encode($data));
    
    // Log the full response for debugging
    // error_log("Payment response: " . print_r($response, true));

    return $response->redirect_url ?? null;
}