<?php
header('Content-Type: application/json; charset=utf-8');
require_once 'config.php';
checkApiKey();

$user_id = intval($_POST['user_id'] ?? 0);
$amount = intval($_POST['amount'] ?? 0);
$package_id = intval($_POST['package_id'] ?? 0);
$package_name = $_POST['package_name'] ?? 'پکیج VIOLEX';

if (!$user_id || !$amount) {
    echo json_encode(['status' => false, 'message' => 'اطلاعات ناقص']);
    exit;
}

try {
    $pdo = getDB();
    $invoice_number = 'INV-' . date('Ymd') . '-' . str_pad(rand(1, 99999), 5, '0', STR_PAD_LEFT);
    $check = $pdo->prepare("SELECT id FROM invoices WHERE invoice_number = ?");
    $check->execute([$invoice_number]);
    if ($check->fetch()) {
        $invoice_number = 'INV-' . date('YmdHis') . '-' . rand(100, 999);
    }

    $stmt = $pdo->prepare("INSERT INTO invoices (invoice_number, user_id, amount, package_id, package_name, status, created_at) VALUES (?, ?, ?, ?, ?, 'pending', NOW())");
    $stmt->execute([$invoice_number, $user_id, $amount, $package_id, $package_name]);
    $invoice_id = $pdo->lastInsertId();

    $amount_rial = $amount * 10;
    $zibal_data = [
        'merchant' => ZIBAL_MERCHANT,
        'amount' => $amount_rial,
        'description' => "خرید $package_name - کاربر $user_id",
        'callbackUrl' => ZIBAL_CALLBACK,
        'orderId' => $invoice_number,
    ];

    $ch = curl_init(ZIBAL_REQUEST_URL);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($zibal_data));
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Accept: application/json']);
    curl_setopt($ch, CURLOPT_TIMEOUT, 20);
    $response = curl_exec($ch);
    $curl_error = curl_error($ch);
    curl_close($ch);

    if ($curl_error) {
        $pdo->prepare("UPDATE invoices SET status='failed', error_message=? WHERE id=?")->execute(['cURL Error: ' . $curl_error, $invoice_id]);
        echo json_encode(['status' => false, 'message' => 'خطا در ارتباط با زیبال']);
        exit;
    }

    $zibal_result = json_decode($response, true);

    if (!isset($zibal_result['result']) || $zibal_result['result'] != 100) {
        $error_msg = $zibal_result['message'] ?? 'خطای نامشخص از زیبال';
        $pdo->prepare("UPDATE invoices SET status='failed', error_message=? WHERE id=?")->execute([$error_msg, $invoice_id]);
        echo json_encode(['status' => false, 'message' => $error_msg, 'code' => $zibal_result['result'] ?? -1]);
        exit;
    }

    $track_id = $zibal_result['trackId'];
    $payment_url = ZIBAL_STARTPAY . $track_id;
    $invoice_page_url = "https://violexq.ir/invoice.php?id=" . $invoice_id;

    $pdo->prepare("UPDATE invoices SET track_id=? WHERE id=?")->execute([$track_id, $invoice_id]);

    echo json_encode([
        'status' => true,
        'invoice_id' => $invoice_id,
        'invoice_number' => $invoice_number,
        'payment_url' => $invoice_page_url,
        'track_id' => $track_id,
        'zibal_url' => $payment_url,
    ]);
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['status' => false, 'message' => $e->getMessage()]);
}
