<?php
// miniapp/api/admin_deposits.php
// نمایش و مدیریت درخواست‌های افزایش موجودی
header('Content-Type: application/json; charset=utf-8');

require __DIR__ . '/config.php';

$method = $_SERVER['REQUEST_METHOD'];
$userId = 0;

if ($method === 'GET') {
    $userId = isset($_GET['user_id']) ? (int)$_GET['user_id'] : 0;
    $status = isset($_GET['status']) ? strtoupper($_GET['status']) : 'PENDING';
    $page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
} else {
    $input = json_decode(file_get_contents('php://input'), true);
    $userId = isset($input['user_id']) ? (int)$input['user_id'] : 0;
    $txId = isset($input['tx_id']) ? (int)$input['tx_id'] : 0;
    $action = isset($input['action']) ? strtoupper($input['action']) : '';
}

if ($userId <= 0) {
    echo json_encode(['ok' => false, 'error' => 'شناسه کاربر نامعتبر است'], JSON_UNESCAPED_UNICODE);
    exit;
}

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

try {
    if ($method === 'GET') {
        // لیست درخواست‌ها
        $limit = 10;
        $offset = ($page - 1) * $limit;

        $countStmt = $pdo->prepare("SELECT COUNT(*) as count FROM wallet_transactions WHERE type = 'DEPOSIT' AND status = ?");
        $countStmt->execute([$status]);
        $total = $countStmt->fetch()['count'];

        $stmt = $pdo->prepare("
            SELECT wt.*, u.username, u.first_name, u.last_name 
            FROM wallet_transactions wt 
            LEFT JOIN users u ON wt.user_id = u.id 
            WHERE wt.type = 'DEPOSIT' AND wt.status = :status
            ORDER BY wt.created_at DESC 
            LIMIT :limit OFFSET :offset
        ");
        $stmt->bindValue(':status', $status, PDO::PARAM_STR);
        $stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
        $stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
        $stmt->execute();
        $deposits = $stmt->fetchAll(PDO::FETCH_ASSOC);

        echo json_encode([
            'ok' => true,
            'data' => [
                'deposits' => $deposits,
                'current_page' => $page,
                'total_pages' => ceil($total / $limit),
                'total_count' => (int)$total
            ]
        ], JSON_UNESCAPED_UNICODE);

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

        // دریافت تراکنش
        $txStmt = $pdo->prepare("SELECT * FROM wallet_transactions WHERE id = ? AND type = 'DEPOSIT'");
        $txStmt->execute([$txId]);
        $tx = $txStmt->fetch(PDO::FETCH_ASSOC);

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

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

        if ($action === 'APPROVE') {
            $pdo->beginTransaction();

            $amount = (int)$tx['amount'];
            $target_user_id = $tx['user_id'];
            
            // 🎁 محاسبه بونوس شارژ کیف پول
            $bonus_amount = 0;
            $bonus_percent = 0;
            if ($amount >= 500000) {
                $bonus_percent = 21;
                $bonus_amount = (int)($amount * 0.21);
            } elseif ($amount >= 200000) {
                $bonus_percent = 10;
                $bonus_amount = (int)($amount * 0.10);
            }
            
            $total_add = $amount + $bonus_amount;

            // آپدیت وضعیت تراکنش
            $updateTx = $pdo->prepare("UPDATE wallet_transactions SET status = 'COMPLETED', updated_at = NOW() WHERE id = ?");
            $updateTx->execute([$txId]);

            // افزایش موجودی کاربر (مبلغ + بونوس) و علامت‌گذاری دریافت بونوس
            $updateBalance = $pdo->prepare("UPDATE users SET balance = balance + ?, has_wallet_bonus = CASE WHEN ? > 0 THEN 1 ELSE has_wallet_bonus END WHERE id = ?");
            $updateBalance->execute([$total_add, $bonus_amount, $target_user_id]);

            $pdo->commit();

            // 🎊 ارسال استیکر جشن
            tg('sendSticker', [
                'chat_id' => $target_user_id,
                'sticker' => 'CAACAgIAAxkBAAEKZxZlRxQAAXJpAAE4WdBxgzOHqMhC1wYAAl0AA1advQoq6bOPz9BwzTME'
            ]);

            // ساخت پیام
            $user_msg = "🎉✨ <b>موجودی کیف پول شما افزایش یافت!</b> ✨🎉\n\n";
            $user_msg .= "💵 <b>مبلغ واریزی:</b> " . number_format($amount) . " تومان\n";
            
            if ($bonus_amount > 0) {
                $user_msg .= "🎁 <b>بونوس {$bonus_percent}%:</b> +" . number_format($bonus_amount) . " تومان 🔥\n";
                $user_msg .= "━━━━━━━━━━━━━━━━━━━━\n";
                $user_msg .= "💰 <b>مجموع افزایش:</b> " . number_format($total_add) . " تومان\n";
            }
            
            // گرفتن موجودی جدید
            $balanceStmt = $pdo->prepare("SELECT balance FROM users WHERE id = ?");
            $balanceStmt->execute([$target_user_id]);
            $new_balance = $balanceStmt->fetchColumn();
            
            $user_msg .= "💳 <b>موجودی جدید:</b> " . number_format($new_balance) . " تومان\n\n";
            
            if ($bonus_amount > 0) {
                $user_msg .= "🌟 تبریک! شما بونوس ویژه شارژ کیف پول دریافت کردید! 🌟";
            } else {
                $user_msg .= "💡 شارژ بالای ۲۰۰ هزار تومان بونوس ۱۰٪ و بالای ۵۰۰ هزار تومان بونوس ۲۱٪ دارد!";
            }

            tg('sendMessage', [
                'chat_id' => $target_user_id,
                'text' => $user_msg,
                'parse_mode' => 'HTML'
            ]);

            $result_msg = 'تراکنش تایید شد و موجودی کاربر افزایش یافت';
            if ($bonus_amount > 0) {
                $result_msg .= " + بونوس {$bonus_percent}% (" . number_format($bonus_amount) . " تومان)";
            }

            echo json_encode([
                'ok' => true,
                'message' => $result_msg,
                'bonus_amount' => $bonus_amount,
                'bonus_percent' => $bonus_percent
            ], JSON_UNESCAPED_UNICODE);

        } else {
            // رد درخواست
            $updateTx = $pdo->prepare("UPDATE wallet_transactions SET status = 'REJECTED', updated_at = NOW() WHERE id = ?");
            $updateTx->execute([$txId]);

            // اطلاع به کاربر
            tg('sendMessage', [
                'chat_id' => $tx['user_id'],
                'text' => "❌ درخواست افزایش موجودی رد شد.\n\n💰 مبلغ: " . number_format($tx['amount']) . " تومان\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_deposits error: " . $e->getMessage());
    echo json_encode(['ok' => false, 'error' => $e->getMessage()], JSON_UNESCAPED_UNICODE);
}

