<?php
/**
 * Wallet deposit request
 */
require_once 'config.php';
if (function_exists('getSetting') && getSetting('sales_enabled','1') !== '1') {
    echo json_encode(['ok'=>false,'error'=>'فروش موقتاً متوقف است. لطفاً چند ساعت دیگر دوباره تلاش کنید.'], JSON_UNESCAPED_UNICODE);
    exit;
}
require_once 'manual_crypto_lib.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo json_encode(['ok' => false, 'error' => 'POST required'], JSON_UNESCAPED_UNICODE);
    exit;
}

$userId = $_POST['user_id'] ?? null;
$amount = $_POST['amount'] ?? null;
$receiptText = $_POST['receipt_text'] ?? null;
$payableAmount = (int)($_POST['payable_amount'] ?? 0);

if (!$userId || !$amount) {
    echo json_encode(['ok' => false, 'error' => 'user_id and amount required'], JSON_UNESCAPED_UNICODE);
    exit;
}

$userId = (int)$userId;
manual_crypto_blocked_guard($userId);
$amount = (int)$amount;

if ($amount < 10000) {
    echo json_encode(['ok' => false, 'error' => 'حداقل مبلغ واریز ۱۰,۰۰۰ تومان است'], JSON_UNESCAPED_UNICODE);
    exit;
}

// Handle file upload
$receiptFileId = null;
$uploadDir = __DIR__ . '/../uploads/';

if (!is_dir($uploadDir)) {
    mkdir($uploadDir, 0755, true);
}

if (isset($_FILES['receipt']) && $_FILES['receipt']['error'] === UPLOAD_ERR_OK) {
    $tmpName = $_FILES['receipt']['tmp_name'];
    $ext = strtolower(pathinfo($_FILES['receipt']['name'], PATHINFO_EXTENSION));

    // v27.52: hardened upload validation (match buy_with_card.php).
    if ((int)($_FILES['receipt']['size'] ?? 0) > 5 * 1024 * 1024) {
        echo json_encode(['ok' => false, 'error' => 'حجم رسید نباید بیشتر از ۵ مگابایت باشد'], JSON_UNESCAPED_UNICODE);
        exit;
    }
    $allowedExt = ['jpg', 'jpeg', 'png', 'webp'];
    if (!in_array($ext, $allowedExt, true)) {
        echo json_encode(['ok' => false, 'error' => 'فقط فایل‌های تصویری مجاز هستند'], JSON_UNESCAPED_UNICODE);
        exit;
    }
    // Verify the real MIME type and that the file is a genuine image, not a
    // renamed script. .htaccess already blocks PHP execution in uploads, but
    // this prevents storing disguised payloads at all.
    $allowedMime = ['image/jpeg', 'image/png', 'image/webp'];
    $finfo = function_exists('finfo_open') ? finfo_open(FILEINFO_MIME_TYPE) : null;
    $mime  = $finfo ? finfo_file($finfo, $tmpName) : ($_FILES['receipt']['type'] ?? '');
    if ($finfo) finfo_close($finfo);
    if (!in_array($mime, $allowedMime, true) || !@getimagesize($tmpName)) {
        echo json_encode(['ok' => false, 'error' => 'فایل رسید تصویر معتبر نیست'], JSON_UNESCAPED_UNICODE);
        exit;
    }

    $fileName = "deposit_{$userId}_" . time() . '_' . bin2hex(random_bytes(4)) . ".{$ext}";
    $filePath = $uploadDir . $fileName;

    if (move_uploaded_file($tmpName, $filePath)) {
        $receiptFileId = $fileName;
    }
}

// Wallet top-up is intentionally NOT affected by card tolerance.
$payableAmount = $amount;

if (!$receiptFileId && trim((string)$receiptText) === '') {
    echo json_encode(['ok' => false, 'error' => 'تصویر رسید یا رسید متنی/شماره پیگیری الزامی است'], JSON_UNESCAPED_UNICODE);
    exit;
}

// Create transaction
$stmt = $pdo->prepare("
    INSERT INTO wallet_transactions (user_id, amount, type, status, description, receipt_file_id, receipt_text)
    VALUES (?, ?, 'DEPOSIT', 'PENDING', 'درخواست افزایش موجودی', ?, ?)
");
$stmt->execute([$userId, $amount, $receiptFileId, $receiptText]);
$txId = (int)$pdo->lastInsertId();

// Get user info
$stmt = $pdo->prepare("SELECT first_name, username FROM users WHERE id = ?");
$stmt->execute([$userId]);
$user = $stmt->fetch() ?: [];

$userName = $user['first_name'] ?? $user['username'] ?? 'کاربر';

// Notify admins - with receipt image
$adminMsg = "💰 **درخواست واریز جدید (مینی‌اپ)**\n\n" .
    "👤 {$userName}\n" .
    "🆔 {$userId}\n" .
    "💵 مبلغ شارژ حساب: " . money($amount) . "\n" .
    ($payableAmount > 0 && $payableAmount !== $amount ? "💳 مبلغ دقیق واریزی: " . money($payableAmount) . "\n" : '') .
    "🆔 تراکنش: #{$txId}";

if ($receiptText) {
    $adminMsg .= "\n\n📝 توضیحات:\n{$receiptText}";
}

$adminButtons = [
    'inline_keyboard' => [
        [
            ['text' => '✅ تأیید', 'callback_data' => "ADMIN_APPROVE_DEPOSIT__{$txId}"],
            ['text' => '❌ رد', 'callback_data' => "ADMIN_REJECT_DEPOSIT__{$txId}"],
        ],
    ],
];

// Send to admins with the receipt photo
$admins = array_filter(array_map('trim', explode(',', ADMIN_IDS)));
$filePath = $uploadDir . $receiptFileId;
$uploadedFileId = null;

foreach ($admins as $adminId) {
    if ($receiptFileId && file_exists($filePath)) {
        // برای اولین ادمین، فایل را آپلود کن و file_id بگیر
        if ($uploadedFileId === null) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, "https://api.telegram.org/bot" . BOT_TOKEN . "/sendPhoto");
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, [
                'chat_id'      => $adminId,
                'photo'        => new CURLFile($filePath),
                'caption'      => $adminMsg,
                'reply_markup' => json_encode($adminButtons, JSON_UNESCAPED_UNICODE),
            ]);
            
            $response = curl_exec($ch);
            curl_close($ch);
            
            // گرفتن file_id از response
            $result = json_decode($response, true);
            if ($result && isset($result['ok']) && $result['ok']) {
                $uploadedFileId = $result['result']['photo'][0]['file_id'] ?? null;
            }
        } else {
            // برای ادمین‌های بعدی از همان file_id استفاده کن
            tg('sendPhoto', [
                'chat_id'      => $adminId,
                'photo'        => $uploadedFileId,
                'caption'      => $adminMsg,
                'reply_markup' => json_encode($adminButtons, JSON_UNESCAPED_UNICODE),
            ]);
        }
    } else {
        // Fallback if file doesn't exist
        tg('sendMessage', [
            'chat_id'      => $adminId,
            'text'         => $adminMsg . "\n\n📝 این درخواست با رسید متنی ثبت شده است.",
            'reply_markup' => json_encode($adminButtons, JSON_UNESCAPED_UNICODE),
        ]);
    }
}

// Log for debugging
error_log("Wallet deposit notification sent: txId=$txId, userId=$userId, amount=$amount, hasFile=" . (file_exists($filePath) ? 'yes' : 'no') . ", admins=" . count($admins));

echo json_encode([
    'ok'      => true,
    'message' => 'درخواست ثبت شد. پس از تأیید ادمین موجودی اضافه می‌شود.',
    'data'    => [
        'tx_id' => $txId,
    ],
], JSON_UNESCAPED_UNICODE);
