<?php
// miniapp/api/admin_order_action.php
// تایید یا رد سفارش توسط ادمین (دقیقا مثل callback های بات)
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;
$orderId = isset($input['order_id']) ? (int)$input['order_id'] : 0;
$action = isset($input['action']) ? strtoupper(trim($input['action'])) : '';

// اعتبارسنجی
if ($userId <= 0 || $orderId <= 0 || !in_array($action, ['APPROVE', 'REJECT'])) {
    echo json_encode(['ok' => false, 'error' => 'پارامترهای نامعتبر'], JSON_UNESCAPED_UNICODE);
    exit;
}

// چک ادمین بودن
if (!isAdmin($userId)) {
    echo json_encode(['ok' => false, 'error' => 'فقط ادمین مجاز است'], JSON_UNESCAPED_UNICODE);
    exit;
}

try {
    // دریافت اطلاعات سفارش
    $stmt = $pdo->prepare("SELECT * FROM orders WHERE id = ?");
    $stmt->execute([$orderId]);
    $order = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$order) {
        echo json_encode(['ok' => false, 'error' => 'سفارش یافت نشد'], JSON_UNESCAPED_UNICODE);
        exit;
    }

    if ($order['status'] !== 'PENDING') {
        echo json_encode(['ok' => false, 'error' => 'این سفارش قبلا پردازش شده است'], JSON_UNESCAPED_UNICODE);
        exit;
    }

    // دریافت اطلاعات کاربر
    $userStmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
    $userStmt->execute([$order['user_id']]);
    $customer = $userStmt->fetch(PDO::FETCH_ASSOC);

    if ($action === 'APPROVE') {
        // تایید سفارش
        $pdo->beginTransaction();

        // آپدیت وضعیت سفارش
        $updateStmt = $pdo->prepare("UPDATE orders SET status = 'APPROVED', approved_at = NOW() WHERE id = ?");
        $updateStmt->execute([$orderId]);

        // 🎁 محاسبه جایزه ۱۰٪ خرید (فقط برای پرداخت کارت به کارت)
        $cashback_amount = 0;
        if ($order['payment_method'] === 'CARD' || $order['payment_method'] === null) {
            // چک کردن اینکه کاربر بونوس کیف پول نگرفته باشد
            $check_bonus = $pdo->prepare("SELECT has_wallet_bonus FROM users WHERE id = ?");
            $check_bonus->execute([$order['user_id']]);
            $user_bonus_status = $check_bonus->fetch();
            
            if (!$user_bonus_status || $user_bonus_status['has_wallet_bonus'] == 0) {
                $cashback_amount = (int)($order['price'] * 0.10);
                
                // افزودن به کیف پول کاربر
                $add_cashback = $pdo->prepare("UPDATE users SET balance = balance + ?, total_cashback = COALESCE(total_cashback, 0) + ? WHERE id = ?");
                $add_cashback->execute([$cashback_amount, $cashback_amount, $order['user_id']]);
            }
        }

        // ارسال کانفیگ به کاربر (اگر موجود باشد)
        $config = get_available_config($order['plan_code']);
        
        if ($config) {
            // ثبت در جدول sales
            $salesStmt = $pdo->prepare("
                INSERT INTO sales (user_id, plan_title, plan_code, price, config_text, delivered_at, expires_at) 
                VALUES (?, ?, ?, ?, ?, NOW(), DATE_ADD(NOW(), INTERVAL 30 DAY))
            ");
            $salesStmt->execute([
                $order['user_id'],
                $order['plan_title'],
                $order['plan_code'],
                $order['price'],
                $config['config_text'] ?? ''
            ]);

            // علامت‌گذاری کانفیگ به عنوان استفاده شده
            mark_config_used($config['id'], $order['user_id']);

            $pdo->commit();

            // 🎊 ارسال استیکر موفقیت
            tg('sendSticker', [
                'chat_id' => $order['user_id'],
                'sticker' => 'CAACAgIAAxkBAAEKZxplRxRYAAF1u9VqxLxgcmS3B4YxWgACXQADWp29CirpAAHz0HDJMzME'
            ]);

            // ارسال پیام به کاربر
            $userMsg = "🎉✨ <b>سفارش شما تایید شد!</b> ✨🎉\n\n";
            $userMsg .= "📦 پلن: {$order['plan_title']}\n";
            $userMsg .= "💰 مبلغ: " . number_format($order['price']) . " تومان\n\n";
            $userMsg .= "🔐 کانفیگ شما:\n\n";
            $userMsg .= "<code>" . htmlspecialchars($config['config_text']) . "</code>";

            tg('sendMessage', [
                'chat_id' => $order['user_id'],
                'text' => $userMsg,
                'parse_mode' => 'HTML'
            ]);

            // 🎁 اطلاع‌رسانی جایزه خرید
            if ($cashback_amount > 0) {
                $balanceStmt = $pdo->prepare("SELECT balance FROM users WHERE id = ?");
                $balanceStmt->execute([$order['user_id']]);
                $new_balance = $balanceStmt->fetchColumn();

                $cashback_msg = "🎁🔥 <b>جایزه خرید دریافت کردید!</b> 🔥🎁\n\n";
                $cashback_msg .= "━━━━━━━━━━━━━━━━━━━━\n";
                $cashback_msg .= "💰 <b>جایزه ۱۰٪ خرید:</b> +" . number_format($cashback_amount) . " تومان\n";
                $cashback_msg .= "━━━━━━━━━━━━━━━━━━━━\n\n";
                $cashback_msg .= "🌟 این مبلغ به کیف پول شما اضافه شد!\n";
                $cashback_msg .= "💳 موجودی جدید: " . number_format($new_balance) . " تومان\n\n";
                $cashback_msg .= "✨ از خرید شما متشکریم! ✨";
                
                tg('sendMessage', [
                    'chat_id' => $order['user_id'],
                    'text' => $cashback_msg,
                    'parse_mode' => 'HTML'
                ]);
            }

            echo json_encode([
                'ok' => true,
                'message' => 'سفارش تایید شد و کانفیگ ارسال شد',
                'config_delivered' => true,
                'cashback_amount' => $cashback_amount
            ], JSON_UNESCAPED_UNICODE);

        } else {
            // کانفیگ موجود نیست - به صف انتظار اضافه شود
            $pdo->commit();

            // اضافه به صف انتظار
            $queueStmt = $pdo->prepare("
                INSERT INTO config_waiting_queue (order_id, user_id, plan_code, created_at) 
                VALUES (?, ?, ?, NOW())
                ON DUPLICATE KEY UPDATE created_at = NOW()
            ");
            $queueStmt->execute([$orderId, $order['user_id'], $order['plan_code']]);

            // اطلاع به کاربر
            tg('sendMessage', [
                'chat_id' => $order['user_id'],
                'text' => "✅ پرداخت شما تایید شد!\n\n📦 پلن: {$order['plan_title']}\n\n⏳ کانفیگ در حال آماده‌سازی است و به زودی برای شما ارسال خواهد شد.",
                'parse_mode' => 'HTML'
            ]);

            // اطلاع به ادمین‌ها
            $admins = explode(',', ADMIN_IDS);
            foreach ($admins as $adminId) {
                $adminId = trim($adminId);
                if ($adminId) {
                    tg('sendMessage', [
                        'chat_id' => $adminId,
                        'text' => "⚠️ کمبود کانفیگ!\n\nسفارش #{$orderId} تایید شد ولی کانفیگ موجود نیست.\n\nپلن: {$order['plan_code']}\n\nلطفا کانفیگ اضافه کنید."
                    ]);
                }
            }

            echo json_encode([
                'ok' => true,
                'message' => 'سفارش تایید شد - کانفیگ موجود نیست و به صف اضافه شد',
                'config_delivered' => false
            ], JSON_UNESCAPED_UNICODE);
        }

    } else {
        // رد سفارش
        $updateStmt = $pdo->prepare("UPDATE orders SET status = 'REJECTED', rejected_at = NOW() WHERE id = ?");
        $updateStmt->execute([$orderId]);

        // اطلاع به کاربر
        tg('sendMessage', [
            'chat_id' => $order['user_id'],
            'text' => "❌ سفارش شما رد شد.\n\n📦 پلن: {$order['plan_title']}\n\n💬 در صورت نیاز با پشتیبانی تماس بگیرید.",
            'parse_mode' => 'HTML'
        ]);

        echo json_encode([
            'ok' => true,
            'message' => 'سفارش رد شد و به کاربر اطلاع داده شد'
        ], JSON_UNESCAPED_UNICODE);
    }

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

/**
 * دریافت یک کانفیگ موجود برای پلن
 * 🔧 اصلاح شده: جستجوی انعطاف‌پذیرتر با لاگ‌گذاری
 */
function get_available_config($plan_code) {
    global $pdo;
    
    // 🔧 حذف فاصله‌های اضافی و یکسان‌سازی
    $plan_code = trim($plan_code);
    
    error_log("🔍 get_available_config: searching for plan_code = '{$plan_code}'");
    
    try {
        // 🔧 ابتدا جستجوی دقیق
        $stmt = $pdo->prepare("SELECT * FROM configs WHERE plan_code = ? AND is_used = 0 ORDER BY id ASC LIMIT 1");
        $stmt->execute([$plan_code]);
        $config = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if ($config) {
            error_log("✅ Found config #{$config['id']} for plan_code = '{$plan_code}'");
            return $config;
        }
        
        // 🔧 اگر پیدا نشد، جستجوی case-insensitive
        $stmt = $pdo->prepare("SELECT * FROM configs WHERE LOWER(TRIM(plan_code)) = LOWER(?) AND is_used = 0 ORDER BY id ASC LIMIT 1");
        $stmt->execute([$plan_code]);
        $config = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if ($config) {
            error_log("✅ Found config #{$config['id']} (case-insensitive) for plan_code = '{$plan_code}'");
            return $config;
        }
        
        // 🔧 لاگ کانفیگ‌های موجود برای دیباگ
        $available = $pdo->query("SELECT plan_code, COUNT(*) as cnt FROM configs WHERE is_used = 0 GROUP BY plan_code")->fetchAll(PDO::FETCH_ASSOC);
        error_log("❌ No config found for plan_code = '{$plan_code}'. Available configs: " . json_encode($available));
        
        return null;
        
    } catch (Exception $e) {
        error_log("❌ Error in get_available_config: " . $e->getMessage());
        return null;
    }
}

/**
 * علامت‌گذاری کانفیگ به عنوان استفاده شده
 */
function mark_config_used($config_id, $user_id) {
    global $pdo;
    try {
        $stmt = $pdo->prepare("UPDATE configs SET is_used = 1, used_by = ?, used_at = NOW() WHERE id = ?");
        $stmt->execute([$user_id, $config_id]);
    } catch (Exception $e) {
        error_log("mark_config_used error: " . $e->getMessage());
    }
}

