<?php
// miniapp/api/buy_with_credit.php
header('Content-Type: application/json; charset=utf-8');

require __DIR__ . '/config.php';

$input  = json_decode(file_get_contents('php://input'), true) ?: [];
$userId = isset($input['user_id']) ? (int)$input['user_id'] : 0;
$planCode = isset($input['plan_code']) ? strtoupper(trim($input['plan_code'])) : '';  // 🔧 یکسان‌سازی

error_log("📝 buy_with_credit: userId={$userId}, planCode='{$planCode}'");

if ($userId <= 0 || $planCode === '') {
    echo json_encode([
        'ok'    => false,
        'error' => 'درخواست نامعتبر است',
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

try {
    // کاربر
    $stmt = $pdo->prepare("SELECT id, balance FROM users WHERE id = ?");
    $stmt->execute([$userId]);
    $user = $stmt->fetch();
    if (!$user) {
        echo json_encode(['ok' => false, 'error' => 'کاربر پیدا نشد'], JSON_UNESCAPED_UNICODE);
        exit;
    }

    // 🔧 پلن - جستجوی انعطاف‌پذیر
    $stmt = $pdo->prepare("SELECT * FROM plans WHERE (plan_code = ? OR UPPER(TRIM(plan_code)) = ?) AND is_active = 1");
    $stmt->execute([$planCode, $planCode]);
    $plan = $stmt->fetch();
    if (!$plan) {
        error_log("❌ buy_with_credit: Plan not found for planCode='{$planCode}'");
        echo json_encode(['ok' => false, 'error' => 'پلن پیدا نشد یا غیرفعال است'], JSON_UNESCAPED_UNICODE);
        exit;
    }

    $price = (int)$plan['price'];

    if ((int)$user['balance'] < $price) {
        echo json_encode(['ok' => false, 'error' => 'اعتبار شما برای این خرید کافی نیست'], JSON_UNESCAPED_UNICODE);
        exit;
    }

    $pdo->beginTransaction();

    // ایجاد سفارش و تأیید فوری
    $stmt = $pdo->prepare("INSERT INTO orders 
        (user_id, plan_code, plan_title, price, payment_method, status, created_at, approved_at) 
        VALUES (:uid, :pc, :pt, :pr, 'BALANCE', 'APPROVED', NOW(), NOW())");
    $stmt->execute([
        ':uid' => $userId,
        ':pc'  => $plan['plan_code'],
        ':pt'  => $plan['title'],
        ':pr'  => $price,
    ]);
    $orderId = (int)$pdo->lastInsertId();

    // کم‌کردن از اعتبار
    $stmt = $pdo->prepare("UPDATE users SET balance = balance - :amount WHERE id = :uid");
    $stmt->execute([
        ':amount' => $price,
        ':uid'    => $userId,
    ]);

    // ثبت فروش
    $stmt = $pdo->prepare("INSERT INTO sales 
        (order_id, user_id, plan_code, plan_title, price, config_data, delivered_at, expires_at, is_active)
        VALUES (:oid, :uid, :pc, :pt, :pr, NULL, NOW(), NULL, 1)");
    $stmt->execute([
        ':oid' => $orderId,
        ':uid' => $userId,
        ':pc'  => $plan['plan_code'],
        ':pt'  => $plan['title'],
        ':pr'  => $price,
    ]);

    // اضافه کردن به صف تحویل کانفیگ
    $stmt = $pdo->prepare("INSERT INTO config_waiting_queue (order_id, user_id, plan_code, created_at)
                           VALUES (:oid, :uid, :pc, NOW())");
    $stmt->execute([
        ':oid' => $orderId,
        ':uid' => $userId,
        ':pc'  => $plan['plan_code'],
    ]);

    // گرفتن اعتبار جدید
    $stmt = $pdo->prepare("SELECT balance FROM users WHERE id = ?");
    $stmt->execute([$userId]);
    $newBalance = (int)$stmt->fetchColumn();

    $pdo->commit();

    echo json_encode([
        'ok'   => true,
        'data' => [
            'status'      => 'APPROVED',
            'order_id'    => $orderId,
            'new_credit'  => $newBalance,
        ],
    ], JSON_UNESCAPED_UNICODE);

} catch (Throwable $e) {
    if ($pdo->inTransaction()) {
        $pdo->rollBack();
    }
    echo json_encode([
        'ok'    => false,
        'error' => 'خطا در ثبت خرید',
    ], JSON_UNESCAPED_UNICODE);
}
