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

// دریافت پارامترهای فرم (چون فایل داریم، از $_POST و $_FILES استفاده می‌کنیم)
$userId = isset($_POST['user_id']) ? (int)$_POST['user_id'] : 0;
$planCode = isset($_POST['plan_code']) ? strtoupper(trim($_POST['plan_code'])) : '';  // 🔧 یکسان‌سازی
$receiptText = isset($_POST['receipt_text']) ? trim($_POST['receipt_text']) : '';

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

// اطمینان از وجود کاربر
ensureUser(['id' => $userId]);

if ($userId <= 0 || empty($planCode)) {
    echo json_encode(['ok' => false, 'error' => 'اطلاعات ناقص است']);
    exit;
}

// چک کردن فایل
if (!isset($_FILES['receipt']) || $_FILES['receipt']['error'] !== UPLOAD_ERR_OK) {
    echo json_encode(['ok' => false, 'error' => 'لطفاً تصویر رسید را آپلود کنید']);
    exit;
}

try {
    // 1. دریافت اطلاعات کاربر
    $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
    $stmt->execute([$userId]);
    $user = $stmt->fetch();
    if (!$user) throw new Exception("کاربر یافت نشد");

    // 2. دریافت اطلاعات پلن با استفاده از bot_get_plan
    $plan = bot_get_plan($planCode);
    if (!$plan) throw new Exception("پلن نامعتبر است");

    // 3. آپلود فایل در سرور
    $uploadDir = __DIR__ . '/../uploads/'; // پوشه آپلود
    if (!is_dir($uploadDir)) mkdir($uploadDir, 0755, true);
    
    $ext = pathinfo($_FILES['receipt']['name'], PATHINFO_EXTENSION);
    $fileName = 'receipt_' . $userId . '_' . time() . '.' . $ext;
    $filePath = $uploadDir . $fileName;
    
    if (!move_uploaded_file($_FILES['receipt']['tmp_name'], $filePath)) {
        throw new Exception("خطا در ذخیره فایل");
    }

    // 4. ثبت سفارش در دیتابیس (PENDING)
    $pdo->beginTransaction();
    
    $stmt = $pdo->prepare("INSERT INTO orders 
        (user_id, plan_code, plan_title, price, payment_method, status, receipt_text, created_at) 
        VALUES (:uid, :pc, :pt, :pr, 'CARD', 'PENDING', :txt, NOW())");
    
    $stmt->execute([
        ':uid' => $userId,
        ':pc'  => $planCode, // استفاده از متغیر اصلی
        ':pt'  => $plan['title'],
        ':pr'  => $plan['price'],
        ':txt' => $receiptText
    ]);
    $orderId = $pdo->lastInsertId();
    
    $pdo->commit();

    // 5. ارسال به ادمین تلگرام (دقیقا مثل بات)
    // ساخت کپشن
    $caption = "📥 <b>رسید جدید (مینی‌اپ)</b>\n\n";
    $caption .= "🛒 پلن: {$plan['title']}\n";
    $caption .= "💳 مبلغ: " . number_format($plan['price']) . " تومان\n";
    $caption .= "👤 کاربر: <a href='tg://user?id={$userId}'>{$user['first_name']}</a> ({$userId})\n";
    $caption .= "#{$orderId}\n\n";
    if ($receiptText) {
        $caption .= "📝 توضیحات: " . htmlspecialchars($receiptText);
    }

    // دکمه‌های شیشه‌ای (دقیقا همان callback_data که bot.php می‌شناسد)
    $keyboard = [
        'inline_keyboard' => [
            [
                ['text' => '✅ تایید', 'callback_data' => 'ADMIN_APPROVE__' . $orderId],
                ['text' => '❌ رد', 'callback_data' => 'ADMIN_REJECT__' . $orderId]
            ],
            [
                ['text' => '🔧 دریافت کانفیگ', 'callback_data' => 'ADMIN_GETCFG__' . $orderId]
            ]
        ]
    ];

    // ارسال برای تمام ادمین‌ها
    $admins = explode(',', ADMIN_IDS);
    foreach ($admins as $adminId) {
        $adminId = trim($adminId);
        if ($adminId) {
            tg('sendPhoto', [
                'chat_id' => $adminId,
                'photo' => $filePath,
                'caption' => $caption,
                'parse_mode' => 'HTML',
                'reply_markup' => json_encode($keyboard)
            ]);
        }
    }

    echo json_encode(['ok' => true, 'order_id' => $orderId]);

} catch (Exception $e) {
    if ($pdo->inTransaction()) $pdo->rollBack();
    echo json_encode(['ok' => false, 'error' => $e->getMessage()]);
}