<?php
// --- click_webhook_handler.php ---
// هذا هو الـ Webhook الرئيسي الذي يستقبل إشعار تأكيد الدفع من Click

include "../../jwtconnect.php";
include "./finalize_payment.php"; // تضمين ملف إتمام العملية

header('Content-Type: application/json');

// **مهم جداً: التحقق من مصدر الطلب**
// يجب التحقق من أن هذا الطلب قادم فعلاً من Click وليس من أي طرف آخر
// المثال التالي يستخدم مفتاح سري مشترك (Shared Secret)
$expectedToken = trim(file_get_contents('/home/intaleq-wallet/.clickKey')); // يجب استبداله بتوكن حقيقي
$receivedToken = $_SERVER['HTTP_X_AUTH_TOKEN'] ?? '';

if ($receivedToken !== $expectedToken) {
    http_response_code(401); // Unauthorized
    echo json_encode(["status" => "error", "message" => "Authentication failed."]);
    exit;
}

// قراءة البيانات القادمة من Click (عادة تكون بصيغة JSON في الـ body)
$json_data = file_get_contents('php://input');
$data = json_decode($json_data, true);

$invoiceNumber = $data['invoice_number'] ?? null;
$transactionId = $data['transaction_id'] ?? null;
$paymentStatus = $data['status'] ?? null;

if (empty($invoiceNumber) || empty($transactionId) || $paymentStatus !== 'success') {
    http_response_code(400); // Bad Request
    echo json_encode(["status" => "error", "message" => "Missing or invalid payment data."]);
    exit;
}

try {
    $con->beginTransaction();

    // 1. البحث عن الفاتورة وتحديث حالتها
    $stmt = $con->prepare(
        "UPDATE `click_invoices` 
         SET `status` = 'completed', `click_transaction_id` = :transaction_id 
         WHERE `invoice_number` = :invoice_number AND `status` = 'pending'"
    );
    $stmt->execute([
        ':transaction_id' => $transactionId,
        ':invoice_number' => $invoiceNumber
    ]);

    if ($stmt->rowCount() > 0) {
        // تم تحديث الفاتورة بنجاح، الآن نقوم بإتمام العملية
        $invoiceId = $con->lastInsertId(); // ملاحظة: هذا قد لا يعمل دائماً مع UPDATE، الأفضل جلب الـ ID
        
        // جلب ID الفاتورة بعد التأكد من وجودها
        $idStmt = $con->prepare("SELECT id FROM `click_invoices` WHERE `invoice_number` = :invoice_number");
        $idStmt->execute([':invoice_number' => $invoiceNumber]);
        $invoiceRecord = $idStmt->fetch();
        $invoiceId = $invoiceRecord['id'];

        $finalizationResult = finalizeClickPayment($con, $invoiceId);

        if ($finalizationResult['success']) {
            $con->commit();
            echo json_encode(["status" => "success", "message" => "Transaction finalized."]);
        } else {
            $con->rollBack();
            // يجب هنا التعامل مع الحالة التي فشل فيها الإيداع رغم نجاح الدفع
            error_log("CRITICAL: Payment received for invoice {$invoiceNumber} but finalization failed.");
            http_response_code(500);
            echo json_encode(["status" => "error", "message" => "Finalization failed."]);
        }
    } else {
        // لم يتم العثور على فاتورة معلقة بهذا الرقم (ربما تمت معالجتها سابقاً)
        $con->rollBack();
        http_response_code(404);
        echo json_encode(["status" => "error", "message" => "Invoice not found or already processed."]);
    }

} catch (Exception $e) {
    $con->rollBack();
    error_log("Error in click_webhook_handler.php: " . $e->getMessage());
    http_response_code(500);
    echo json_encode(["status" => "error", "message" => "An internal server error occurred."]);
}

?>
