<?php
require_once __DIR__ . '/../includes/init.php';
require_once __DIR__ . '/../includes/auth.php';
if (function_exists('ggai_user_require_login')) {
    ggai_user_require_login('/user/deposit.php');
} elseif (function_exists('checkUserAuth')) {
    checkUserAuth('/user/deposit.php');
}
require_once __DIR__ . '/../includes/functions.php';
require_once __DIR__ . '/../includes/power_summary_helper.php';

$user_id = (int) ($_SESSION['user_id'] ?? 0);
if ($user_id <= 0) {
    header('Location: /login.php?redirected=1');
    exit;
}

// 掩藏钱包地址函数
function mask_wallet_address($address) {
    if (empty($address)) return '';
    $len = strlen($address);
    if ($len <= 12) return str_repeat('*', $len);
    // 显示前6位和后6位，中间用***掩藏
    return substr($address, 0, 6) . '***' . substr($address, -6);
}

/** 订单/二维码弹窗用：主网说明只保留到「约…分钟」，逗号后手续费等不显示 */
function deposit_network_label_short($label) {
    $s = trim((string) $label);
    if ($s === '') {
        return '';
    }
    $pos = mb_strpos($s, '，');
    if ($pos === false) {
        $pos = strpos($s, ',');
    }
    if ($pos !== false && $pos > 0) {
        return trim(mb_substr($s, 0, $pos));
    }
    return $s;
}

// 获取合伙人数据库配置（与 user/index.php 保持一致）
$partnerInfo = $GLOBALS['partnerInfo'] ?? null;

// 如果全局信息不完整，则补充默认值
if (!$partnerInfo) {
    $partnerInfo = [
        'welcome_text' => '欢迎光临创世纪智能AI量化平台',
        'contact_info' => '',
        'contact_show_user' => 'partner',
        'site_name' => 'AI智能量化',
        'download_url' => 'http://down.ggai365.com'
    ];
}
$download_url = trim($partnerInfo['download_url'] ?? '');
if (!$download_url) {
    $download_url = 'http://down.ggai365.com';
}

// 读取提现通道
$withdraw_channel = get_system_setting('withdraw_channel'); // BA 或 OE

$network_order = ['BEP20', 'Optimism', 'Arbitrum'];
$network_labels = [
    'BEP20' => __t('deposit_network_bep20', '币AN智能链BSC-BEP20 约10分钟，手续费最低，OE帐号不支持此网络'),
    'Optimism' => __t('deposit_network_optimism', 'Optimism 较慢，时间约15至25分钟，手续费极低'),
    'Arbitrum' => __t('deposit_network_arbitrum', 'Arbitrum 较慢，时间约15至25分钟，手续费极低'),
];
// 动态添加TRC20
if ($withdraw_channel === 'BA') {
    $network_order[] = 'TRC20_BA';
    $network_labels['TRC20_BA'] = __t('deposit_network_trc20_ba', 'TRC20（波场币AN-OE-TP等）约10分钟，手续费较高，少于50不建议选');
} elseif ($withdraw_channel === 'OE') {
    $network_order[] = 'TRC20_OE';
    $network_labels['TRC20_OE'] = __t('deposit_network_trc20_oe', 'TRC20（OE波场）时间约10分钟，手续费较高，少于50不建议选');
}
$network_labels_short = [];
foreach ($network_labels as $netKey => $netLabel) {
    $network_labels_short[$netKey] = deposit_network_label_short($netLabel);
}
$networks = [];
foreach ($network_order as $net) {
    if ($net === 'TRC20_BA') {
        $addr = get_system_setting('usdt_trc20_wallet_ba');
    } elseif ($net === 'TRC20_OE') {
        $addr = get_system_setting('usdt_trc20_wallet_oe');
    } else {
        $addr = get_system_setting('usdt_' . strtolower($net) . '_wallet');
    }
    if ($addr) $networks[$net] = $addr;
}
$default_network = $network_order[0];

// 若浏览器无记忆，则回退到“该用户最近一次充值主网”作为默认选项
try {
    $stmt_last_network = $pdo->prepare("SELECT network FROM recharge_orders WHERE user_id=? AND status NOT IN ('failed','cancelled','expired') AND network IS NOT NULL AND network<>'' ORDER BY created_at DESC LIMIT 1");
    $stmt_last_network->execute([$user_id]);
    $last_network = trim((string)($stmt_last_network->fetchColumn() ?: ''));
    if ($last_network !== '' && isset($networks[$last_network])) {
        $default_network = $last_network;
    }
} catch (Throwable $e) {
    // 查询失败则保持现有默认顺序
}

// 检查用户是否有权限申请独立网站
$can_apply_partner_site = false;
if (isset($user_id)) {
    // 获取用户role_id
    $stmtRole = $pdo->prepare("SELECT role_id FROM users WHERE id=?");
    $stmtRole->execute([$user_id]);
    $user_role_id = intval($stmtRole->fetchColumn());
    
    // 1. 查找Top合伙人（9/10/11）
    $top_partner_id = null;
    $stmtU = $pdo->prepare("SELECT id, referrer_id, role_id FROM users WHERE id=?");
    $stmtU->execute([$user_id]);
    $cur = $stmtU->fetch(PDO::FETCH_ASSOC);
    $visited = [$user_id];
    while ($cur && !empty($cur['referrer_id'])) {
        $stmt2 = $pdo->prepare("SELECT id, referrer_id, role_id FROM users WHERE id=?");
        $stmt2->execute([$cur['referrer_id']]);
        $cur = $stmt2->fetch(PDO::FETCH_ASSOC);
        if (!$cur || in_array($cur['id'], $visited)) break;
        $visited[] = $cur['id'];
        if (in_array(intval($cur['role_id']), [9,10,11], true)) {
            $top_partner_id = intval($cur['id']);
            break;
        }
    }
    
    // 2. 如果找到Top合伙人，检查权限
    if ($top_partner_id && !in_array($user_role_id, [9, 10, 11])) {
        $can_apply_partner_site = true; // 默认允许
        $has_team_leader = false;
        
        // 向上查找团队长（13-39）
        $stmtCur = $pdo->prepare("SELECT referrer_id FROM users WHERE id=?");
        $stmtCur->execute([$user_id]);
        $curInfo = $stmtCur->fetch(PDO::FETCH_ASSOC);
        $checkUser = $curInfo ? intval($curInfo['referrer_id']) : 0;
        $visitedTL = [];
        
        while ($checkUser && $checkUser > 0) {
            if (in_array($checkUser, $visitedTL, true)) break;
            $visitedTL[] = $checkUser;
            
            $stmtUser = $pdo->prepare("SELECT id, referrer_id, role_id FROM users WHERE id=?");
            $stmtUser->execute([$checkUser]);
            $userInfo = $stmtUser->fetch(PDO::FETCH_ASSOC);
            if (!$userInfo) break;
            
            // 检查是否是团队长（13-39）
            if (in_array(intval($userInfo['role_id']), [13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39], true)) {
                $has_team_leader = true;
                // 检查该团队长的购买权限
                $stmtTL = $pdo->prepare("SELECT allow_partner_site FROM partner_team_leader_commission WHERE partner_id=? AND team_leader_id=? LIMIT 1");
                $stmtTL->execute([$top_partner_id, $userInfo['id']]);
                $tlConfig = $stmtTL->fetch(PDO::FETCH_ASSOC);
                $allowPartnerSite = $tlConfig ? (intval($tlConfig['allow_partner_site'] ?? 1)) : 1; // 默认允许（1）
                if ($allowPartnerSite == 0) {
                    $can_apply_partner_site = false;
                }
                break; // 找到团队长后停止查找
            }
            $checkUser = intval($userInfo['referrer_id']);
        }
        
        // 如果没有团队长，检查Top合伙人的全局开关
        if (!$has_team_leader) {
            $stmtPolicy = $pdo->prepare("SELECT allow_direct_partner_site FROM partner_site_policy WHERE top_partner_id=? LIMIT 1");
            $stmtPolicy->execute([$top_partner_id]);
            $allowDirect = $stmtPolicy->fetchColumn();
            if ($allowDirect !== false && intval($allowDirect) == 0) {
                $can_apply_partner_site = false;
            }
        }
    }
    if (function_exists('scheme_t_lite_enabled') && scheme_t_lite_enabled() && function_exists('shop_apply_is_allowed')) {
        $can_apply_partner_site = shop_apply_is_allowed($pdo, intval($user_id));
    }
}

$deposit_scheme_apply = function_exists('scheme_t_lite_enabled') && scheme_t_lite_enabled();
$deposit_tier_hint = __t('user_partner_apply_v22_tier_hint', '起始看团队 · 升档看整站');
if ($deposit_scheme_apply && !empty($user_id)) {
    $deposit_pct_text = static function ($value): string {
        return rtrim(rtrim(number_format(floatval($value), 2, '.', ''), '0'), '.');
    };
    $deposit_suggested_tier = function_exists('merchant_suggested_open_tier')
        ? merchant_suggested_open_tier($pdo, intval($user_id))
        : 15;
    $deposit_pct = $deposit_pct_text(merchant_shop_package_pct($deposit_suggested_tier));
    $deposit_tier_brand = function_exists('merchant_shop_tier_brand_title')
        ? merchant_shop_tier_brand_title($deposit_suggested_tier)
        : '';
    $deposit_tier_hint = $deposit_tier_brand !== ''
        ? ($deposit_tier_brand . ' · ' . $deposit_pct . '% 起')
        : ($deposit_pct . '% 起');
}

// 获取用户信息（用points字段作为算力余额）
$stmt = $pdo->prepare("SELECT username, nickname, points FROM users WHERE id=? LIMIT 1");
$stmt->execute([$user_id]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if (!is_array($user)) {
    $user = ['username' => '', 'nickname' => '', 'points' => 0];
}
$username = (string) ($user['username'] ?? '');
$nickname = (string) ($user['nickname'] ?? '');
$points_raw = (float) ($user['points'] ?? 0);
$power_balance = number_format($points_raw, 2, '.', '');
$show_power_balance = $points_raw >= 0;
$realtime_power_display = 0;
if (!$show_power_balance && function_exists('ggai_user_realtime_power_stats')) {
    $rt_stats = ggai_user_realtime_power_stats($pdo, $user_id, $points_raw);
    $realtime_power_actual = (int) ($rt_stats['realtime_power'] ?? 0);
    $realtime_power_display = $realtime_power_actual < 0 ? 0 : $realtime_power_actual;
}

$message = '';
$messageType = 'danger';
if (!empty($_GET['msg_code'])) {
    $depositFlashMap = [
        'cancel_ok' => __t('deposit_cancel_ok', '充值订单已成功取消。'),
        'cancel_not_found' => __t('deposit_cancel_not_found', '订单不存在或无权限操作。'),
        'cancel_invalid_status' => __t('deposit_cancel_invalid_status', '该订单当前状态不可取消。'),
    ];
    $flashCode = (string) $_GET['msg_code'];
    if (isset($depositFlashMap[$flashCode])) {
        $message = $depositFlashMap[$flashCode];
        $messageType = ($flashCode === 'cancel_ok') ? 'success' : 'danger';
    }
}
$order_created = false;
$order_info = null;

// 改进：智能随机数生成，避免与所有用户最近订单金额冲突
function generateSmartRandomDecimal($pdo, $user_amount, $user_id) {
    // 获取系统设置的自动认领有效期
    $auto_claim_hours = intval(get_system_setting('deposit_auto_claim_hours') ?: 1);
    $user_amount = (float) $user_amount;
    // 仅拉取与当前金额可能冲突的区间（±4% 或 ±4U 再加随机尾数余量），避免全表扫 pending 导致充值页超时白屏
    $margin = max(4.0, $user_amount * 0.04) + 12.0;
    $amount_lo = max(0.0, $user_amount - $margin);
    $amount_hi = $user_amount + $margin + 12.0;
    $stmt = $pdo->prepare(
        "SELECT amount FROM recharge_orders
         WHERE status IN ('pending','claiming','review')
           AND created_at >= DATE_SUB(NOW(), INTERVAL ? HOUR)
           AND amount BETWEEN ? AND ?
         ORDER BY created_at DESC
         LIMIT 400"
    );
    $stmt->execute([$auto_claim_hours, $amount_lo, $amount_hi]);
    $existing_amounts = $stmt->fetchAll(PDO::FETCH_COLUMN);
    
    // 生成基础随机数（2.1-9.9元）
    $base_random = number_format(mt_rand(21, 99) / 10, 1, '.', '');
    $final_amount = round($user_amount + $base_random, 2);
    
    // 检查是否与现有订单金额冲突（相差小于1元视为冲突）
    $conflict_found = false;
    foreach ($existing_amounts as $existing_amount) {
        if (abs($final_amount - $existing_amount) < 1) {
            $conflict_found = true;
            break;
        }
    }
    
    // 如果冲突，增加额外随机数
    if ($conflict_found) {
        $extra_random = number_format(mt_rand(21, 99) / 10, 1, '.', '');
        $base_random += $extra_random;
        $final_amount = round($user_amount + $base_random, 2);
        
        // 再次检查冲突，最多尝试3次
        $attempts = 0;
        while ($attempts < 3) {
            $conflict_found = false;
            foreach ($existing_amounts as $existing_amount) {
                if (abs($final_amount - $existing_amount) < 1) {
                    $conflict_found = true;
                    break;
                }
            }
            if (!$conflict_found) break;
            
            $extra_random = number_format(mt_rand(21, 99) / 10, 1, '.', '');
            $base_random += $extra_random;
            $final_amount = round($user_amount + $base_random, 2);
            $attempts++;
        }
    }
    
    return number_format($base_random, 2, '.', '');
}

// 页面刷新时生成智能随机小数（同一会话 5 分钟内复用，减轻 GET 压力）
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    $rand_ts = (int) ($_SESSION['deposit_rand_decimal_ts'] ?? 0);
    if (empty($_SESSION['deposit_rand_decimal']) || (time() - $rand_ts) > 300) {
        $_SESSION['deposit_rand_decimal'] = generateSmartRandomDecimal($pdo, 0, $user_id);
        $_SESSION['deposit_rand_decimal_ts'] = time();
    }
}
$rand_decimal = isset($_SESSION['deposit_rand_decimal']) ? $_SESSION['deposit_rand_decimal'] : '2.50';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $amount = floatval($_POST['amount'] ?? 0);
    $network = $_POST['network'] ?? $default_network;
    if (!isset($networks[$network])) $network = $default_network;
    $min_amount = floatval(get_system_setting('min_recharge_amount') ?: 100);
    $max_amount = 10000000; // 最大充值金额1000万
    // 防幽灵单：session.user_id 必须对应真实用户，否则拒绝开单
    $depositUserExists = false;
    try {
        $stmtUserChk = $pdo->prepare('SELECT id FROM users WHERE id = ? LIMIT 1');
        $stmtUserChk->execute([$user_id]);
        $depositUserExists = (bool) $stmtUserChk->fetchColumn();
    } catch (Throwable $e) {
        $depositUserExists = false;
    }
    if (!$depositUserExists) {
        $message = __t('deposit_error_invalid_user', '登录状态异常，请重新登录后再提交充值');
        try {
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? ($_SERVER['REMOTE_ADDR'] ?? '');
            if (is_string($ip) && strpos($ip, ',') !== false) {
                $ip = trim(explode(',', $ip)[0]);
            }
            error_log('[deposit] reject ghost user_id=' . $user_id . ' ip=' . $ip);
            if (isset($pdo) && $pdo instanceof PDO) {
                $stmtLog = $pdo->prepare("INSERT INTO system_logs (username, user_id, log_type, action, details, ip_address, created_at) VALUES (?, ?, ?, ?, ?, ?, NOW())");
                $stmtLog->execute([
                    (string)($_SESSION['username'] ?? ''),
                    $user_id,
                    'deposit_reject',
                    '拒绝幽灵用户充值开单',
                    'session_user_id=' . $user_id . ' 在 users 表不存在',
                    (string)$ip,
                ]);
            }
        } catch (Throwable $ignoreLog) {
        }
    } elseif ($amount < $min_amount) {
        $message = str_replace('{amount}', number_format($min_amount, 2, '.', ''), __t('deposit_error_min_amount', '单笔最小充值金额为 {amount} USDT'));
        // 如果语言包中没有，使用实时翻译
        if (defined('CURRENT_LANG') && CURRENT_LANG !== 'zh_cn' && CURRENT_LANG !== 'zh_tw' && empty($LANG['deposit_error_min_amount'])) {
            if (function_exists('translate_content')) {
                global $pdo;
                $translated = translate_content('单笔最小充值金额为' . number_format($min_amount, 2, '.', '') . ' USDT', CURRENT_LANG, $pdo);
                if (!empty($translated) && $translated !== '单笔最小充值金额为' . number_format($min_amount, 2, '.', '') . ' USDT') {
                    $message = $translated;
                }
            }
        }
    } elseif ($amount > $max_amount) {
        $message = str_replace('{amount}', number_format($max_amount, 0, '.', ','), __t('deposit_error_max_amount', '单笔最大充值金额为 {amount} USDT'));
        // 如果语言包中没有，使用实时翻译
        if (defined('CURRENT_LANG') && CURRENT_LANG !== 'zh_cn' && CURRENT_LANG !== 'zh_tw' && empty($LANG['deposit_error_max_amount'])) {
            if (function_exists('translate_content')) {
                global $pdo;
                $translated = translate_content('单笔最大充值金额为' . number_format($max_amount, 0, '.', ',') . ' USDT', CURRENT_LANG, $pdo);
                if (!empty($translated) && $translated !== '单笔最大充值金额为' . number_format($max_amount, 0, '.', ',') . ' USDT') {
                    $message = $translated;
                }
            }
        }
    } else {
        // ===== 强化：在有效期窗口内只允许存在一笔未完成充值订单 =====
        $hours = intval(get_system_setting('deposit_auto_claim_hours') ?: 1);
        
        // 检查用户是否有未完成的订单
        $stmtOne = $pdo->prepare("SELECT COUNT(*) FROM recharge_orders WHERE user_id=? AND status IN ('pending','claiming','review','manual') AND created_at >= DATE_SUB(NOW(), INTERVAL {$hours} HOUR)");
        $stmtOne->execute([$user_id]);
        $existing_orders = intval($stmtOne->fetchColumn());
        
        if ($existing_orders > 0) {
            $message = str_replace('{hours}', $hours, __t('deposit_error_existing_order', '您在最近{hours}小时内已有未完成的充值订单，请先取消或等待自动过期后再提交新的充值。'));
            // 如果语言包中没有，使用实时翻译
            if (defined('CURRENT_LANG') && CURRENT_LANG !== 'zh_cn' && CURRENT_LANG !== 'zh_tw' && empty($LANG['deposit_error_existing_order'])) {
                if (function_exists('translate_content')) {
                    global $pdo;
                    $translated = translate_content('您在最近' . $hours . '小时内已有未完成的充值订单，请先取消或等待自动过期后再提交新的充值。', CURRENT_LANG, $pdo);
                    if (!empty($translated) && $translated !== '您在最近' . $hours . '小时内已有未完成的充值订单，请先取消或等待自动过期后再提交新的充值。') {
                        $message = $translated;
                    }
                }
            }
        } else {
            // 额外检查：防止短时间内重复提交（改为1分钟）
            $stmtRecent = $pdo->prepare("SELECT COUNT(*) FROM recharge_orders WHERE user_id=? AND created_at >= DATE_SUB(NOW(), INTERVAL 1 MINUTE)");
            $stmtRecent->execute([$user_id]);
            $recent_orders = intval($stmtRecent->fetchColumn());
            
            if ($recent_orders > 0) {
                $message = __t('deposit_error_frequent_submit', '请勿频繁提交，请等待1分钟后再试。');
                // 如果语言包中没有，使用实时翻译
                if (defined('CURRENT_LANG') && CURRENT_LANG !== 'zh_cn' && CURRENT_LANG !== 'zh_tw' && empty($LANG['deposit_error_frequent_submit'])) {
                    if (function_exists('translate_content')) {
                        global $pdo;
                        $translated = translate_content('请勿频繁提交，请等待1分钟后再试。', CURRENT_LANG, $pdo);
                        if (!empty($translated) && $translated !== '请勿频繁提交，请等待1分钟后再试。') {
                            $message = $translated;
                        }
                    }
                }
            } else {
                // 全局订单冲突校验（与全站最近N小时内的已完成和未完成订单比较，已包含本人）
                // 限制规则：必须与所有订单金额相差4%以上或4 USDT以上才可以
                $detection_hours = intval(get_system_setting('deposit_auto_claim_hours') ?: 1);
                $base_amount = $amount; // 基础金额（不含随机数）
                $min_diff_percent = 4; // 最小比例差：4%
                $min_diff_abs = 4; // 最小绝对差：4 USDT
                
                // 查询已完成订单
                $stmtCompletedAll = $pdo->prepare("SELECT amount FROM recharge_orders WHERE status='confirmed' AND created_at >= DATE_SUB(NOW(), INTERVAL ? HOUR)");
                $stmtCompletedAll->execute([$detection_hours]);
                $completed_all_amounts = $stmtCompletedAll->fetchAll(PDO::FETCH_COLUMN);
                
                // 查询未完成订单
                $stmtPendingAll = $pdo->prepare("SELECT amount FROM recharge_orders WHERE status IN ('pending','claiming','review','manual') AND created_at >= DATE_SUB(NOW(), INTERVAL ? HOUR)");
                $stmtPendingAll->execute([$detection_hours]);
                $pending_all_amounts = $stmtPendingAll->fetchAll(PDO::FETCH_COLUMN);
                
                // 合并所有订单金额
                $all_amounts = array_merge($completed_all_amounts, $pending_all_amounts);
                
                $conflict_all = false;
                $conflict_amount = null;
                $conflict_type = ''; // 'completed' 或 'pending'
                
                // 检查与所有订单的冲突
                foreach ($all_amounts as $check_amount) {
                    $diff_percent_all = abs($base_amount - $check_amount) / max($check_amount, 0.01) * 100; // 避免除以0
                    $diff_abs_all = abs($base_amount - $check_amount);
                    // 修复边界条件：如果相差≤4%且≤4 USDT，则冲突（必须同时满足：相差>4% 或 >4 USDT 才可以）
                    if ($diff_percent_all <= $min_diff_percent && $diff_abs_all <= $min_diff_abs) {
                        $conflict_all = true;
                        $conflict_amount = $check_amount;
                        // 判断冲突类型
                        if (in_array($check_amount, $completed_all_amounts)) {
                            $conflict_type = 'completed';
                        } else {
                            $conflict_type = 'pending';
                        }
                        break;
                    }
                }
                
                if ($conflict_all) {
                    // 自动调整金额：计算一个安全的金额
                    // 策略：在冲突金额的基础上，增加或减少至少4.5%和4.5 USDT（确保超过4%和4 USDT的限制）
                    $safe_adjust_percent = 4.5; // 使用4.5%确保超过4%的限制
                    $safe_adjust_abs = 4.5; // 使用4.5 USDT确保超过4 USDT的限制
                    
                    // 计算调整后的金额（向上调整，避免金额变小）
                    $adjusted_amount = $conflict_amount * (1 + $safe_adjust_percent / 100) + $safe_adjust_abs;
                    // 如果调整后的金额小于原金额，则向下调整
                    if ($adjusted_amount <= $base_amount) {
                        $adjusted_amount = $conflict_amount * (1 - $safe_adjust_percent / 100) - $safe_adjust_abs;
                        // 确保调整后的金额不会太小（至少是原金额的90%）
                        if ($adjusted_amount < $base_amount * 0.9) {
                            $adjusted_amount = $conflict_amount * (1 + $safe_adjust_percent / 100) + $safe_adjust_abs;
                        }
                    }
                    // 四舍五入到2位小数
                    $adjusted_amount = round($adjusted_amount, 2);
                    
                    // 再次验证调整后的金额是否安全（与所有订单比较）
                    $is_safe = true;
                    foreach ($all_amounts as $check_amount) {
                        $diff_percent = abs($adjusted_amount - $check_amount) / max($check_amount, 0.01) * 100; // 避免除以0
                        $diff_abs = abs($adjusted_amount - $check_amount);
                        // 修复边界条件：改为 <= 4% 且 <= 4 USDT
                        if ($diff_percent <= $min_diff_percent && $diff_abs <= $min_diff_abs) {
                            $is_safe = false;
                            break;
                        }
                    }
                    
                    // 如果调整后的金额仍然不安全，使用更保守的策略
                    if (!$is_safe) {
                        // 使用更大的调整幅度（6%和6 USDT）
                        $adjusted_amount = $conflict_amount * (1 + 6 / 100) + 6;
                        $adjusted_amount = round($adjusted_amount, 2);
                        // 再次验证
                        $is_safe = true;
                        foreach ($all_amounts as $check_amount) {
                            $diff_percent = abs($adjusted_amount - $check_amount) / max($check_amount, 0.01) * 100; // 避免除以0
                            $diff_abs = abs($adjusted_amount - $check_amount);
                            // 修复边界条件：改为 <= 4% 且 <= 4 USDT
                            if ($diff_percent <= $min_diff_percent && $diff_abs <= $min_diff_abs) {
                                $is_safe = false;
                                break;
                            }
                        }
                    }
                    
                    if ($is_safe) {
                        // 使用调整后的金额继续处理
                        $amount = $adjusted_amount;
                        // 不设置错误消息，继续执行后续流程
                        $conflict_all = false; // 标记为已解决，继续执行
                    } else {
                        // 如果仍然无法找到安全金额，返回错误
                        $conflict_type_text = $conflict_type === 'completed'
                            ? __t('deposit_conflict_type_completed', '已完成')
                            : __t('deposit_conflict_type_pending', '未完成');
                        $message = str_replace(
                            ['{hours}', '{type}', '{percent}', '{abs}'],
                            [$detection_hours, $conflict_type_text, $min_diff_percent, $min_diff_abs],
                            __t('deposit_error_conflict_manual', '检测到与系统中最近{hours}小时内的{type}订单金额相近（相差≤{percent}%且≤{abs} USDT），无法自动调整，请手动调整充值金额后重新提交。充值金额必须与所有订单相差>{percent}%或>{abs} USDT。')
                        );
                    }
                }
                
                // 只有在没有冲突或已成功调整的情况下，才继续执行订单创建流程
                if (!$conflict_all) {
                    // 使用智能随机数生成，避免与所有用户订单冲突
                    $rand_decimal = generateSmartRandomDecimal($pdo, $amount, $user_id);
                    $final_amount = round($amount + $rand_decimal, 2);
                    
                    // 再次检查最终金额（含随机数）与所有订单（已完成+未完成）的冲突（使用4%/4 USDT限制）
                    $auto_claim_hours = intval(get_system_setting('deposit_auto_claim_hours') ?: 1);
                    // 查询已完成订单的最终金额
                    $stmtCompletedFinal = $pdo->prepare("SELECT amount FROM recharge_orders WHERE status='confirmed' AND created_at >= DATE_SUB(NOW(), INTERVAL ? HOUR)");
                    $stmtCompletedFinal->execute([$auto_claim_hours]);
                    $completed_final_amounts = $stmtCompletedFinal->fetchAll(PDO::FETCH_COLUMN);
                    // 查询未完成订单的最终金额
                    $stmtPendingFinal = $pdo->prepare("SELECT amount FROM recharge_orders WHERE status IN ('pending','claiming','review','manual') AND created_at >= DATE_SUB(NOW(), INTERVAL ? HOUR)");
                    $stmtPendingFinal->execute([$auto_claim_hours]);
                    $pending_final_amounts = $stmtPendingFinal->fetchAll(PDO::FETCH_COLUMN);
                    // 合并所有订单的最终金额
                    $all_final_amounts = array_merge($completed_final_amounts, $pending_final_amounts);
                    
                    $final_conflict = false;
                    foreach ($all_final_amounts as $check_final_amount) {
                        $diff_percent_final = abs($final_amount - $check_final_amount) / max($check_final_amount, 0.01) * 100; // 避免除以0
                        $diff_abs_final = abs($final_amount - $check_final_amount);
                        // 修复边界条件：改为 <= 4% 且 <= 4 USDT（包含等于的情况）
                        if ($diff_percent_final <= $min_diff_percent && $diff_abs_final <= $min_diff_abs) {
                            $final_conflict = true;
                            break;
                        }
                    }
                    
                    if ($final_conflict) {
                        $message = str_replace(
                            ['{percent}', '{abs}'],
                            [$min_diff_percent, $min_diff_abs],
                            __t('deposit_error_final_conflict_retry', '系统检测到与订单金额相近（相差≤{percent}%且≤{abs} USDT），已自动调整随机数，请重新提交。')
                        );
                    } else {
                        // 写入recharge_orders表
                        $stmt = $pdo->prepare("INSERT INTO recharge_orders (user_id, amount, network, status, address, created_at) VALUES (:user_id, :amount, :network, 'pending', :address, NOW())");
                        $stmt->execute([
                            ':user_id' => $user_id,
                            ':amount' => $final_amount,
                            ':network' => $network,
                            ':address' => $networks[$network]
                        ]);
                        $order_id = $pdo->lastInsertId();
                        // 留痕：开单 IP / UA，便于幽灵单或异常 session 反查
                        try {
                            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? ($_SERVER['REMOTE_ADDR'] ?? '');
                            if (is_string($ip) && strpos($ip, ',') !== false) {
                                $ip = trim(explode(',', $ip)[0]);
                            }
                            $ua = substr((string)($_SERVER['HTTP_USER_AGENT'] ?? ''), 0, 180);
                            $stmtLog = $pdo->prepare("INSERT INTO system_logs (username, user_id, log_type, action, details, ip_address, user_agent, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, NOW())");
                            $stmtLog->execute([
                                (string)($_SESSION['username'] ?? ''),
                                $user_id,
                                'deposit_create',
                                '用户提交充值订单',
                                'order_id=' . $order_id . ' amount=' . $final_amount . ' network=' . $network,
                                (string)$ip,
                                $ua,
                            ]);
                            $stmtDl = $pdo->prepare("INSERT INTO deposit_logs (deposit_id, user_id, action, amount, remark, ip_address, created_at) VALUES (?, ?, 'create', ?, ?, ?, NOW())");
                            $stmtDl->execute([$order_id, $user_id, $final_amount, 'network=' . $network, (string)$ip]);
                        } catch (Throwable $ignoreCreateLog) {
                        }
                        $order_created = true;
                        $order_info = [
                            'id' => $order_id,
                            'amount' => $final_amount,
                            'network' => $network,
                            'address' => $networks[$network],
                            'created_at' => date('Y-m-d H:i:s'),
                        ];
                        // 新增：订单生成后，刷新随机小数，防止重复提交时小数不变
                        unset($_SESSION['deposit_rand_decimal']);
                    }
                }
        }
    }
}
}

// 查询未完成的充值订单（recharge_orders表，状态为pending/claiming/review）
$stmt = $pdo->prepare("SELECT * FROM recharge_orders WHERE user_id=? AND status IN ('pending','claiming','review') ORDER BY created_at DESC");
$stmt->execute([$user_id]);
$pending_orders = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 查询历史充值记录；管理员拒绝(failed)仅后台保留；用户主动取消(cancelled)与过期可展示
$stmt = $pdo->prepare("SELECT amount, address, txid, status, created_at, network FROM recharge_orders WHERE user_id=? AND status IN ('confirmed','expired','cancelled') ORDER BY created_at DESC LIMIT 20");
$stmt->execute([$user_id]);
$history_orders = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 表单下拉默认值：POST提交值优先，其次为后端默认（最近充值主网/固定顺序）
$selected_network = $default_network;
if (isset($network) && isset($networks[$network])) {
    $selected_network = $network;
} elseif (isset($_POST['network']) && isset($networks[$_POST['network']])) {
    $selected_network = $_POST['network'];
}

$pageTitle = __t('deposit_page_title', '充值申请');
$_SESSION['_ggai_sidebar_partner_cache'] = ['can_apply' => !empty($can_apply_partner_site)];
if (empty($_SESSION['role_id'])) {
    try {
        $stmtRole = $pdo->prepare('SELECT role_id FROM users WHERE id=? LIMIT 1');
        $stmtRole->execute([$user_id]);
        $_SESSION['role_id'] = (int) $stmtRole->fetchColumn();
    } catch (Throwable $e) {
        $_SESSION['role_id'] = 0;
    }
}

ob_start();
?>
<script src="/assets/js/qrcode.min.js"></script>
<style>
body {
    background: linear-gradient(135deg, #232946 0%, #1a1a2e 100%);
    color: #e3eefe;
    font-family: 'Segoe UI', 'Roboto', 'Arial', sans-serif;
}
.deposit-amount-card {
    display: flex;
    align-items: center;
    background: linear-gradient(90deg, #232946 60%, #2196f3 100%);
    border-radius: 16px;
    box-shadow: 0 2px 16px rgba(33,150,243,0.10);
    padding: 18px 24px;
    margin-bottom: 24px;
    border: 2px solid #2196f3;
    width: 100%;
    max-width: min(560px, 100%);
    margin-left: auto;
    margin-right: auto;
    box-sizing: border-box;
}
.deposit-amount-card .input-wrap {
    flex: 1;
    display: flex;
    align-items: center;
}
.deposit-amount-card input[type="number"] {
    background: #fff;
    color: #232946;
    font-size: 1.5em;
    font-weight: 700;
    border: none;
    outline: none;
  border-radius: 8px;
    padding: 10px 16px;
    width: 100%;
    box-shadow: 0 2px 8px rgba(33,150,243,0.08);
    margin-right: 10px;
    transition: box-shadow 0.2s;
}
.deposit-amount-card input[type="number"]:focus {
    box-shadow: 0 0 0 2px #2196f3;
}
.deposit-amount-card .unit {
    font-size: 1.2em;
    font-weight: 700;
    color: #2196f3;
    background: #e3eefe;
    border-radius: 6px;
    padding: 6px 14px;
    margin-left: 6px;
}
.deposit-network-label {
    display: block;
    font-weight: 700;
    font-size: 1.05em;
    color: #232946;
    margin-bottom: 0.35rem;
}
.deposit-order-amount {
    font-size: 1.85em !important;
    font-weight: 900 !important;
    letter-spacing: 0.02em;
    line-height: 1.2;
}
.deposit-qr-amount-num {
    font-size: 1.9em;
    font-weight: 900;
    line-height: 1.15;
    vertical-align: baseline;
}
#qrLargeAmount {
    font-size: 1.12em;
    padding: 0.5rem 1rem;
}
#qrLargeNetwork {
    display: block;
    width: 100%;
    max-width: 520px;
    margin: 0 auto;
    font-size: 1.05em;
    line-height: 1.45;
    padding: 0.5rem 0.85rem;
    white-space: normal;
    text-align: center;
}
@media (max-width: 600px) {
    .deposit-amount-card { flex-direction: column; padding: 14px 10px; }
    .deposit-amount-card .input-wrap { width: 100%; }
}
@media (max-width: 576px) {
    #depositAddressQR { max-width: 100%; width: min(220px, 72vw) !important; height: min(220px, 72vw) !important; margin-left: auto; margin-right: auto; }
    #depositAddressQR canvas, #depositAddressQR img { max-width: 100% !important; height: auto !important; display: block !important; }
    .qr-pending canvas, .qr-pending img { display: block !important; max-width: 100%; height: auto; }
}
</style>
<div class="tech-header">
    <h2><i class="fas fa-bolt"></i> <?php echo __t('deposit_header_title', '充值管理中心'); ?></h2>
    <div class="desc"><?php echo __t('deposit_header_desc', 'USDT链上充值 · 极速到账 · 算力实时提升'); ?></div>
    <div class="mt-3">
        <a href="<?php echo htmlspecialchars(function_exists('ggai_member_url_with_impersonate') ? ggai_member_url_with_impersonate('/user/index.php') : '/user/index.php'); ?>" class="btn btn-outline-light btn-sm">
            <i class="fas fa-home me-1"></i> <?php echo __t('deposit_btn_back_home', '返回会员首页'); ?>
        </a>
        <a href="javascript:void(0)" class="btn btn-outline-light btn-sm ms-md-2 mt-2 mt-md-0" onclick="window.location.reload();">
            <i class="fas fa-sync-alt me-1"></i> <?php echo htmlspecialchars(__t('deposit_btn_refresh_page', __t('cw_chain_btn_refresh', '刷新本页')), ENT_QUOTES); ?>
        </a>
    </div>
</div>
<div class="container-fluid member-finance-wrap deposit-page-wrap">
  <!-- 独立网站申请广告 -->
  <?php if ($can_apply_partner_site): ?>
            <?php
            $oem_banner_user_id = intval($user_id);
            require __DIR__ . '/includes/oem_apply_banner.php';
            ?>
  <?php endif; ?>
  
  <div class="mb-3">
    <div class="d-flex flex-wrap align-items-center justify-content-between glass-card p-3 mb-3 deposit-user-strip">
      <div>
        <span class="fw-bold me-3"><i class="fas fa-user"></i> <?= __t('cw_chain_user_username', '用户名：'); ?></span><span class="text-primary me-4"><?php echo htmlspecialchars($username); ?></span>
        <span class="fw-bold me-3"><i class="fas fa-user-astronaut"></i> <?= __t('cw_chain_user_nickname', '昵称：'); ?></span><span class="text-success me-4"><?php echo htmlspecialchars($nickname); ?></span>
        <?php if ($show_power_balance): ?>
        <span class="fw-bold me-2"><i class="fas fa-bolt"></i> <?= __t('cw_chain_user_power_balance', '算力余额：'); ?></span><span class="text-warning" style="font-size:1.15em;"><?php echo $power_balance; ?></span>
        <?php else: ?>
        <span class="fw-bold me-2"><i class="fas fa-bolt"></i> <?= __t('user_power_realtime_label', '实时算力'); ?>：</span><span class="text-warning" style="font-size:1.15em;"><?php echo $realtime_power_display; ?></span>
        <?php endif; ?>
      </div>
    </div>
  </div>
  <div class="glass-card p-4 mb-4">
    <h4 class="mb-3 card-title"><i class="fas fa-wallet me-2"></i><?php echo __t('deposit_form_title', '+充值申请（务必按 实应充金额 充值才能自动到账）'); ?></h4>
    <div class="mb-3 text-center deposit-tutorial-row">
        <a href="<?= htmlspecialchars(rtrim($download_url, '/') . '/video_download.php?file=BACZ.mp4') ?>" target="_blank" class="btn btn-success" style="font-weight:bold;">
            <i class="fas fa-video-camera me-1"></i><?php echo __t('deposit_btn_binance_tutorial', '用币AN充值算力教程'); ?>
        </a>
        <a href="<?= htmlspecialchars(rtrim($download_url, '/') . '/video_download.php?file=OECZ.mp4') ?>" target="_blank" class="btn btn-warning" style="font-weight:bold;">
            <i class="fas fa-video-camera me-1"></i><?php echo __t('deposit_btn_okx_tutorial', '用欧E充值算力教程'); ?>
        </a>
    </div>
    <div class="mb-3 text-center deposit-tutorial-row">
        <a href="<?= htmlspecialchars(rtrim($download_url, '/') . '/video_download.php?file=BABUYU.mp4') ?>" target="_blank" class="btn btn-info" style="font-weight:bold;">
            <i class="fas fa-shopping-cart me-1"></i><?php echo __t('deposit_btn_binance_buy', '在币AN上买-U教程'); ?>
        </a>
        <a href="<?= htmlspecialchars(rtrim($download_url, '/') . '/video_download.php?file=OEBUYU.mp4') ?>" target="_blank" class="btn btn-secondary" style="font-weight:bold;">
            <i class="fas fa-shopping-cart me-1"></i><?php echo __t('deposit_btn_okx_buy', '在欧E上买-U教程'); ?>
        </a>
    </div>
    <?php if ($message): ?><div class="alert alert-<?php echo $messageType === 'success' ? 'success' : 'danger'; ?> text-center fw-bold"><?php echo htmlspecialchars($message); ?></div><?php endif; ?>
    <?php if ($order_created && $order_info): ?>
      <div class="alert alert-success">
        <b><?php echo __t('deposit_alert_order_timeout', '请在1小时内完成充值，超时订单将自动作废！'); ?></b><br>
        <b><?php echo __t('deposit_label_order_amount', '应充值金额：'); ?></b> <span class="text-danger deposit-order-amount"><?php echo number_format((float)$order_info['amount'], 2, '.', ''); ?> USDT</span><br>
        <b><?php echo __t('deposit_label_order_network', '主网：'); ?></b> <?php echo htmlspecialchars($network_labels_short[$order_info['network']] ?? $order_info['network'] ?? ''); ?><br>
        <b><?php echo __t('deposit_label_order_address', '收款地址：'); ?></b>
        <div class="input-group mb-2" style="max-width: 100%;">
          <input type="text" class="form-control bg-light fw-bold" id="depositAddress" value="<?php echo $order_info['address']; ?>" readonly style="font-size:1.1em;">
          <button class="btn btn-tech" type="button" id="copyAddressBtn"><i class="fas fa-copy"></i> <?php echo __t('deposit_btn_copy', '复制'); ?></button>
            </div>
        <div class="mt-2 mb-2 text-center">
          <div id="depositAddressQR" style="width:220px;height:220px;margin:0 auto;"></div>
          <div><small class="text-muted"><?php echo __t('deposit_qr_hint', '可直接扫码转账'); ?></small></div>
        </div>
        <small class="text-muted"><?php echo __t('deposit_address_no_edit_hint', '请勿手动输入或修改地址，直接点击复制按钮。'); ?></small>
      </div>
      <script>
      (function(){
        var langCopy = <?php echo json_encode(__t('deposit_btn_copy', '复制')); ?>;
        var langCopied = <?php echo json_encode(__t('deposit_btn_copied', '已复制')); ?>;
        var langCopyFail = <?php echo json_encode(__t('deposit_btn_copy_fail', '复制失败')); ?>;
        var langQrLarge = <?php echo json_encode(__t('deposit_qr_click_large', '点击查看大图')); ?>;
        var orderAmt = <?php echo isset($order_info['amount']) ? json_encode(number_format((float)$order_info['amount'], 2, '.', '')) : 'null'; ?>;
        var orderNet = <?php echo isset($order_info['network']) ? json_encode($network_labels_short[$order_info['network']] ?? $order_info['network']) : 'null'; ?>;
        function ggaiRenderQrBox(el, text, size) {
          if (!el || !text || typeof QRCode === 'undefined') return;
          el.innerHTML = '';
          try { new QRCode(el, { text: String(text), width: size, height: size }); } catch (e) { console.error('QR render failed', e); }
        }
        function initOrderCreatedUi() {
          var addrInput = document.getElementById('depositAddress');
          var copyBtn = document.getElementById('copyAddressBtn');
          var qrEl = document.getElementById('depositAddressQR');
          var addr = addrInput ? String(addrInput.value || '').trim() : '';
          if (copyBtn && addrInput) {
            copyBtn.addEventListener('click', function() {
              var a = addrInput.value;
              var oldHtml = copyBtn.innerHTML;
              navigator.clipboard.writeText(a).then(function() {
                copyBtn.disabled = true;
                copyBtn.innerHTML = '<i class="fas fa-check"></i> ' + langCopied;
                setTimeout(function(){ copyBtn.disabled = false; copyBtn.innerHTML = oldHtml; }, 1500);
              }, function() {
                copyBtn.disabled = true;
                copyBtn.innerHTML = '<i class="fas fa-times"></i> ' + langCopyFail;
                setTimeout(function(){ copyBtn.disabled = false; copyBtn.innerHTML = oldHtml; }, 1500);
              });
            });
          }
          if (qrEl && addr) {
            ggaiRenderQrBox(qrEl, addr, 220);
            qrEl.style.cursor = 'pointer';
            qrEl.title = langQrLarge;
            qrEl.addEventListener('click', function() {
              if (typeof showLargeQR === 'function') showLargeQR(addr, orderAmt, orderNet);
            });
          }
        }
        if (document.readyState === 'loading') {
          document.addEventListener('DOMContentLoaded', initOrderCreatedUi);
        } else {
          initOrderCreatedUi();
        }
      })();
      </script>
    <?php endif; ?>
    <form method="post" class="mb-4 p-3 rounded bg-white shadow-sm" style="border:1px solid #e3e6ea; background:rgba(255,255,255,0.03);" id="userDepositForm">
      <div class="mb-3">
     
        <div class="deposit-amount-card"> 
    
          <div class="input-wrap">
            <input type="number" step="0.01" min="<?php echo get_system_setting('min_recharge_amount') ?: 100; ?>" max="10000000" name="amount" id="inputAmount" placeholder="<?php echo __t('deposit_input_amount_placeholder', '请输入充值金额(避免整百)'); ?>" required>
           
                </div>
                </div>
            </div>
      <div class="mb-2">
      <span style="color:#1565c0;font-weight:bold;font-size:1.05em;display:block;margin-bottom:0.5em;"><?php echo __t('deposit_tip_fund_ratio_relearn', '建议充值金额约占帐号资金的10%至20%，欠费停机时间超6小时需重新学习。'); ?></span>
      <span style="color:#2196f3;font-weight:bold;font-size:1.15em;"><?php echo __t('deposit_tip_avoid_round', '尽量不要填整百，比如100，避免太多相同，可以填比如103，108等'); ?><br><?php echo __t('deposit_usdt_only_label', '目前仅限充'); ?><span style="font-size:1.5em;font-weight:900;color:#d32f2f;letter-spacing:1px;"><?php echo __t('deposit_usdt_only', 'USDT'); ?></span></span><BR>
        <span style="color:RED;font-weight:bold;"><?php echo __t('deposit_real_amount_prefix', '预计实应充金额（以生成订单为准）：'); ?></span>
        <span id="realAmount" style="color:#d32f2f;font-size:1.2em;font-weight:bold;">--</span> USDT
        <span id="depositRandHintLine" style="display:none;color:#888;font-size:0.95em;"><br><?php echo __t('deposit_rand_hint_prefix', '（含智能防重随机数'); ?><span id="depositRandVal"></span><?php echo __t('deposit_rand_hint_suffix', '，务必按此打款，否则无法自动到账要人工认领）'); ?></span>
      </div>
      <div class="mb-3">
        <label for="networkSelect" class="deposit-network-label"><?php echo __t('deposit_select_network_prefix', '请选择充值主网：'); ?></label>
        <select name="network" id="networkSelect" class="form-select" required>
          <?php foreach ($network_order as $net): if(isset($networks[$net])): ?>
            <option value="<?php echo $net; ?>" <?php echo ($selected_network === $net ? 'selected' : ''); ?>><?php echo $network_labels[$net]; ?></option>
          <?php endif; endforeach; ?>
        </select>
      </div>
      <button type="submit" class="btn btn-tech"><?php echo __t('deposit_btn_generate_order', '生成充值订单'); ?> <i class="fas fa-arrow-right"></i></button>
    </form>
    <h5 class="mt-4 mb-2 card-title"><i class="fas fa-hourglass-half me-1"></i><?php echo __t('deposit_pending_title', '未完成订单（打款后填认领单，需填交易哈希）'); ?></h5>
    <div class="alert alert-info mb-2" style="font-size:0.98em;"><?php echo __t('deposit_pending_tip', '币AN充值不需要加白名单，如果是用OE等充值，可能需要先将充值钱包地址通过网页登陆后加入白名单，并把验证改为免验证。充值更方便，有行情时不会因充值太慢而错过'); ?></div>
    <div class="table-responsive" style="overflow-x:auto;">
    <table class="table table-tech table-bordered table-sm align-middle">
      <thead>
        <tr>
            <?php
            $pending_headers = explode(',', __t('deposit_table_pending_headers', '操作,应充值金额,主网,收款地址,创建时间,状态'));
            foreach ($pending_headers as $h): ?>
                <th><?php echo trim($h); ?></th>
            <?php endforeach; ?>
        </tr>
      </thead>
      <tbody>
      <?php if (empty($pending_orders)): ?>
        <tr><td colspan="6" class="text-center text-muted"><?php echo __t('deposit_no_pending', '暂无未完成充值订单'); ?></td></tr>
      <?php else: foreach ($pending_orders as $row): ?>
        <tr>
          <td>
            <?php if($row['status']=='pending'): ?>
              <a href="<?php echo htmlspecialchars(function_exists('ggai_member_url_with_impersonate') ? ggai_member_url_with_impersonate('/user/deposit_claim.php?order_id=' . (int) $row['id']) : ('deposit_claim.php?order_id=' . (int) $row['id'])); ?>" class="btn btn-warning btn-sm"><?php echo __t('deposit_action_claim_txid', '认领TXID'); ?></a>
              <a href="<?php echo htmlspecialchars(function_exists('ggai_member_url_with_impersonate') ? ggai_member_url_with_impersonate('/user/deposit_cancel.php?order_id=' . (int) $row['id']) : ('deposit_cancel.php?order_id=' . (int) $row['id'])); ?>" class="btn btn-outline-danger btn-sm ms-1"><?php echo __t('deposit_action_cancel', '取消'); ?></a>
            <?php elseif($row['status']=='claiming'): ?>
              <span class="text-muted"><?php echo __t('deposit_status_waiting_review', '等待审核'); ?></span>
            <?php elseif($row['status']=='review'): ?>
              <span class="text-muted"><?php echo __t('deposit_status_reviewing', '审核中'); ?></span>
            <?php endif; ?>
          </td>
          <td><b class="text-danger deposit-order-amount"><?php echo number_format((float)$row['amount'], 2, '.', ''); ?></b></td>
          <td><?php echo htmlspecialchars($network_labels_short[$row['network']] ?? $row['network'] ?? ''); ?></td>
          <td style="font-size:0.95em;word-break:break-all;">
            <?php echo $row['address']; ?>
            <?php if (!empty($row['address'])): ?>
            <button type="button" class="btn btn-tech btn-sm ms-1 copy-address" data-copy-address="<?php echo htmlspecialchars($row['address']); ?>" style="vertical-align:baseline;"><i class="fas fa-copy"></i> <?php echo __t('deposit_btn_copy', '复制'); ?></button>
            <div class="qr-box mt-1">
              <div class="qr-pending" data-qr-value="<?php echo htmlspecialchars($row['address']); ?>" data-qr-amount="<?php echo htmlspecialchars(number_format((float)$row['amount'], 2, '.', '')); ?>" data-qr-network="<?php echo htmlspecialchars($network_labels_short[$row['network']] ?? $row['network'] ?? ''); ?>" style="width:110px;height:110px; cursor:pointer;" title="<?php echo htmlspecialchars(__t('deposit_qr_click_large', '点击查看大图'), ENT_QUOTES); ?>"></div>
            </div>
            <?php endif; ?>
          </td>
          <td><?php echo $row['created_at']; ?></td>
          <td>
            <?php if($row['status']=='pending') echo '<span class="badge bg-info">'.__t('deposit_status_pending','待充值').'</span>';
                  elseif($row['status']=='claiming') echo '<span class="badge bg-warning text-dark">'.__t('deposit_status_claiming','待认领').'</span>';
                  elseif($row['status']=='review') echo '<span class="badge bg-primary">'.__t('deposit_status_review','待审核').'</span>';
            ?>
          </td>
        </tr>
      <?php endforeach; endif; ?>
      </tbody>
    </table>
    </div>
    <h5 class="mt-4 mb-2 card-title"><i class="fas fa-list me-1"></i><?php echo __t('deposit_history_title','历史充值记录'); ?> <span class="text-muted" style="font-size:0.95em;"><?php echo __t('deposit_history_subtitle','(最近20条)'); ?> <span style="color:#ff9800;font-weight:bold;"><?php echo __t('deposit_history_addr_tip', '地址非固定，无需保存'); ?></span></span></h5>
    <div class="table-responsive" style="overflow-x:auto;">
    <table class="table table-tech table-bordered table-sm align-middle">
      <thead>
        <tr>
            <?php
            $history_headers = explode(',', __t('deposit_history_headers', '充值金额,主网,收款地址,充值时间,状态,TXID'));
            foreach ($history_headers as $h): ?>
                <th><?php echo trim($h); ?></th>
            <?php endforeach; ?>
        </tr>
      </thead>
      <tbody>
      <?php if (empty($history_orders)): ?>
        <tr><td colspan="6" class="text-center text-muted"><?php echo __t('deposit_no_history','暂无历史充值记录'); ?></td></tr>
      <?php else: foreach ($history_orders as $row): ?>
        <tr>
          <td><b><?php echo number_format((float)$row['amount'], 2, '.', ''); ?></b></td>
          <td><?php echo htmlspecialchars($network_labels_short[$row['network']] ?? $row['network'] ?? '-', ENT_QUOTES); ?></td>
          <td style="font-size:0.95em;word-break:break-all;"><?php echo mask_wallet_address($row['address']); ?></td>
          <td><?php echo $row['created_at']; ?></td>
          <td>
            <?php if($row['status']=='confirmed') echo '<span class="badge bg-success">'.__t('deposit_status_confirmed','已到账').'</span>';
                  elseif($row['status']=='cancelled') echo '<span class="badge bg-secondary">'.__t('deposit_status_cancelled','已取消').'</span>';
                  elseif($row['status']=='failed') echo '<span class="badge bg-danger">'.__t('deposit_status_failed','充值失败').'</span>';
                  elseif($row['status']=='expired') echo '<span class="badge bg-secondary">'.__t('deposit_status_expired','已过期').'</span>';
            ?>
          </td>
          <td style="font-size:0.95em;word-break:break-all;">
            <?php 
            $txid = $row['txid'] ?? '-';
            $txid = standardize_txid($txid);
            if ($txid && strlen($txid) > 12) {
                $txid_masked = substr($txid, 0, 4) . '****' . substr($txid, -4);
            } else {
                $txid_masked = $txid;
            }
            ?>
            <span title="<?php echo htmlspecialchars($txid); ?>"><?php echo htmlspecialchars($txid_masked); ?></span>
          </td>
        </tr>
      <?php endforeach; endif; ?>
      </tbody>
    </table>
    </div>
    </div>
<div id="autoRefreshTip" class="alert alert-info text-center" style="margin-top:20px; background:rgba(33,150,243,0.08); color:#232946; border-radius:8px;">
  <?php
  // 简单拼接自动刷新提示：前后缀来自语言包
  $refresh_tip = __t('deposit_auto_refresh_tip', '本页将在 {seconds} 秒后自动刷新');
  echo str_replace('{seconds}', '<span id="refreshSec">120</span>', $refresh_tip);
  ?>
    </div>
</div>
    <script>
// 前端智能随机数计算（与后端保持一致）
var randDecimal = <?php echo json_encode($rand_decimal); ?>;
// 防重复提交状态
var isSubmitting = false;
// 翻译字符串（用于 JavaScript）
var langDepositErrorDuplicate = <?php echo json_encode(__t('deposit_error_duplicate_submit', '请勿重复提交，正在处理中...')); ?>;
var langDepositErrorInvalidAmount = <?php echo json_encode(__t('deposit_error_invalid_amount', '请输入有效的充值金额')); ?>;
var langDepositErrorMaxAmount = <?php echo json_encode(str_replace('{amount}', '10,000,000', __t('deposit_error_max_amount', '单笔最大充值金额为 {amount} USDT'))); ?>;
var langDepositConfirmNear = <?php echo json_encode(__t('deposit_confirm_near_amount', '检测到与您现有订单金额相近，系统将自动调整随机数避免冲突。是否继续提交？')); ?>;
var langDepositConfirmPending = <?php echo json_encode(__t('deposit_confirm_has_pending', '您当前有未完成的充值订单，请先处理完现有订单再提交新订单。是否继续？')); ?>;
var langDepositSubmitting = <?php echo json_encode(__t('deposit_submitting', '正在提交...')); ?>;
var langDepositBtnGenerate = <?php echo json_encode(__t('deposit_btn_generate_order', '生成充值订单')); ?>;
var langQrLarge = <?php echo json_encode(__t('deposit_qr_click_large', '点击查看大图')); ?>;
var langQrAmountPrefix = <?php echo json_encode(__t('deposit_qr_amount_label', '应充金额：')); ?>;
var langQrNetworkPrefix = <?php echo json_encode(__t('deposit_qr_network_prefix', '主网：')); ?>;
var langCopyBtnHtml = <?php echo json_encode('<i class="fas fa-copy"></i> ' . __t('deposit_btn_copy', '复制')); ?>;
var langCopiedBtnHtml = <?php echo json_encode('<i class="fas fa-check"></i> ' . __t('deposit_btn_copied', '已复制')); ?>;
var langCopyFailBtnHtml = <?php echo json_encode('<i class="fas fa-times"></i> ' . __t('deposit_btn_copy_fail', '复制失败')); ?>;
var networkStorageKey = 'deposit_last_network_user_<?php echo intval($user_id); ?>';

function ggaiWhenJqueryReady(fn) {
    if (typeof window.jQuery !== 'undefined') {
        window.jQuery(fn);
        return;
    }
    var tries = 0;
    var timer = setInterval(function() {
        tries++;
        if (typeof window.jQuery !== 'undefined') {
            clearInterval(timer);
            window.jQuery(fn);
        } else if (tries > 200) {
            clearInterval(timer);
        }
    }, 30);
}

function ggaiRenderQrBox(el, text, size) {
    if (!el || !text || typeof QRCode === 'undefined') {
        return;
    }
    el.innerHTML = '';
    try {
        new QRCode(el, { text: String(text), width: size, height: size });
    } catch (e) {
        console.error('QR render failed', e);
    }
}

function ggaiInitPendingQrCodes() {
    document.querySelectorAll('.qr-pending').forEach(function(node) {
        var val = node.getAttribute('data-qr-value');
        var amt = node.getAttribute('data-qr-amount');
        var net = node.getAttribute('data-qr-network');
        if (!val) {
            return;
        }
        ggaiRenderQrBox(node, val, 110);
        node.style.cursor = 'pointer';
        node.title = langQrLarge;
        node.addEventListener('click', function() {
            if (typeof showLargeQR === 'function') {
                showLargeQR(val, amt, net);
            }
        });
    });
}

(function() {
    function runPendingQr() {
        ggaiInitPendingQrCodes();
    }
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', runPendingQr);
    } else {
        runPendingQr();
    }
})();

// 主网记忆优先级：浏览器记忆 > 后端默认（用户最近充值主网）> 原始顺序
ggaiWhenJqueryReady(function() {
    var $networkSelect = $('#networkSelect');
    if ($networkSelect.length) {
        try {
            var remembered = localStorage.getItem(networkStorageKey);
            if (remembered && $networkSelect.find('option[value="' + remembered + '"]').length) {
                $networkSelect.val(remembered);
            }
        } catch (e) {}

        $networkSelect.on('change', function() {
            try { localStorage.setItem(networkStorageKey, $(this).val()); } catch (e) {}
        });
    }

    $('#userDepositForm').on('submit', function(e) {
    // 防止重复提交
    if (isSubmitting) {
        e.preventDefault();
        alert(langDepositErrorDuplicate);
        return false;
    }
    
    var inputAmount = parseFloat($('input[name="amount"]').val());
    var maxAmount = 10000000; // 最大充值金额1000万
    
    // 检查金额范围
    if (isNaN(inputAmount) || inputAmount <= 0) {
        e.preventDefault();
        alert(langDepositErrorInvalidAmount);
        return false;
    }
    if (inputAmount > maxAmount) {
        e.preventDefault();
        alert(langDepositErrorMaxAmount);
        return false;
    }
    
    var realAmount = (inputAmount + parseFloat(randDecimal)).toFixed(2);
    
    // 检查是否与当前用户的未完成订单冲突
    var pendingAmounts = <?php echo json_encode(array_column($pending_orders, 'amount')); ?>;
    var found = false;
    for (var i = 0; i < pendingAmounts.length; i++) {
        if (Math.abs(pendingAmounts[i] - realAmount) < 1) {
            found = true;
            break;
        }
    }
    if (found) {
        if (!confirm(langDepositConfirmNear)) {
            e.preventDefault();
            return false;
        }
    }
    
    // 检查是否有未完成订单
    if (pendingAmounts.length > 0) {
        if (!confirm(langDepositConfirmPending)) {
            e.preventDefault();
            return false;
        }
    }
    
    // 保存本次选择的主网到浏览器
    try {
        var currentNetwork = $('#networkSelect').val();
        if (currentNetwork) localStorage.setItem(networkStorageKey, currentNetwork);
    } catch (e) {}

    // 设置提交状态
    isSubmitting = true;
    $('button[type="submit"]').prop('disabled', true).text(langDepositSubmitting);
    
    // 3秒后恢复按钮状态（防止卡死）
    setTimeout(function() {
        isSubmitting = false;
        $('button[type="submit"]').prop('disabled', false).html(langDepositBtnGenerate + ' <i class="fas fa-arrow-right"></i>');
    }, 3000);
    });

    // 智能随机数实时计算（未填金额时不显示随机数）
    $('#inputAmount').on('input', function() {
        var userAmount = parseFloat(this.value) || 0;
        var maxAmount = 10000000;
        if (userAmount > maxAmount) {
            this.value = maxAmount;
            userAmount = maxAmount;
            alert(langDepositErrorMaxAmount);
        }
        var realAmount = (userAmount + parseFloat(randDecimal)).toFixed(2);
        if (userAmount > 0) {
            $('#realAmount').text(realAmount);
            $('#depositRandVal').text(parseFloat(randDecimal).toFixed(2));
            $('#depositRandHintLine').show();
        } else {
            $('#realAmount').text('--');
            $('#depositRandHintLine').hide();
        }
    });
});
var leftSec = 120;
function updateRefreshTip() {
    leftSec--;
    if(leftSec <= 0) {
        // 刷新时清除所有URL参数和表单数据，回到不带参数的页面
        window.location.href = window.location.pathname;
    } else {
        document.getElementById('refreshSec').innerText = leftSec;
        setTimeout(updateRefreshTip, 1000);
    }
}
setTimeout(updateRefreshTip, 1000);
    </script>
<!-- 大图二维码 Modal -->
<div class="modal fade" id="qrLargeModal" tabindex="-1" role="dialog" aria-labelledby="qrLargeModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content" style="background:#fff;">
      <div class="modal-header">
        <h5 class="modal-title" id="qrLargeModalLabel"><?php echo __t('deposit_qr_modal_title', '收款地址二维码'); ?></h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo htmlspecialchars(__t('deposit_modal_close', '关闭'), ENT_QUOTES); ?>" onclick="ggaiHideQrLargeModal(); return false;"><span aria-hidden="true">&times;</span></button>
      </div>
      <div class="modal-body text-center">
        <div id="qrLargeContainer" style="width:360px;height:360px;margin:0 auto;"></div>
        <div class="mt-2" id="qrLargeMeta" style="display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;">
          <div class="badge bg-primary" id="qrLargeAmount"><?php echo __t('deposit_qr_amount_label', '应充金额：'); ?><span class="deposit-qr-amount-num" id="qrLargeAmountNum">--</span> USDT</div>
          <div class="badge bg-info text-dark" id="qrLargeNetwork"><?php echo htmlspecialchars(__t('deposit_qr_network_prefix', '主网：')); ?>-</div>
        </div>
        <div class="mt-2" style="display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;">
          <small class="text-muted" id="qrLargeAddr" style="word-break:break-all;"></small>
          <button type="button" class="btn btn-tech btn-sm copy-address" id="copyLargeAddrBtn" data-copy-address=""><i class="fas fa-copy"></i> <?php echo __t('deposit_btn_copy', '复制'); ?></button>
        </div>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal" id="qrLargeCloseBtn" onclick="ggaiHideQrLargeModal(); return false;"><?php echo __t('deposit_modal_close', '关闭'); ?></button>
      </div>
    </div>
  </div>
</div>
<script>
/** 主网文案只保留到「约…分钟」（与 PHP deposit_network_label_short 一致） */
function ggaiNetworkLabelShort(label) {
    var s = String(label || '').trim();
    if (!s) {
        return '-';
    }
    var idx = s.indexOf('，');
    if (idx < 0) {
        idx = s.indexOf(',');
    }
    if (idx > 0) {
        return s.substring(0, idx).trim();
    }
    return s;
}

function ggaiHideQrLargeModal() {
    var modalEl = document.getElementById('qrLargeModal');
    if (!modalEl) {
        return;
    }
    if (typeof window.jQuery !== 'undefined' && window.jQuery.fn && window.jQuery.fn.modal) {
        window.jQuery(modalEl).modal('hide');
        return;
    }
    modalEl.classList.remove('show');
    modalEl.style.display = 'none';
    modalEl.setAttribute('aria-hidden', 'true');
    document.body.classList.remove('modal-open');
    document.body.style.overflow = '';
    document.body.style.paddingRight = '';
    var backdrops = document.querySelectorAll('.modal-backdrop');
    for (var i = 0; i < backdrops.length; i++) {
        if (backdrops[i].parentNode) {
            backdrops[i].parentNode.removeChild(backdrops[i]);
        }
    }
}

function ggaiShowQrLargeModal() {
    var modalEl = document.getElementById('qrLargeModal');
    if (!modalEl) {
        return;
    }
    if (typeof window.jQuery !== 'undefined' && window.jQuery.fn && window.jQuery.fn.modal) {
        window.jQuery(modalEl).modal('show');
        return;
    }
    modalEl.style.display = 'block';
    modalEl.classList.add('show');
    modalEl.removeAttribute('aria-hidden');
    document.body.classList.add('modal-open');
    if (!document.querySelector('.modal-backdrop')) {
        var bd = document.createElement('div');
        bd.className = 'modal-backdrop fade show';
        document.body.appendChild(bd);
    }
}

function showLargeQR(address, amount, networkLabel){
  try{
    var el = document.getElementById('qrLargeContainer');
    if(el){ el.innerHTML=''; new QRCode(el, { text: address, width: 360, height: 360 }); }
    document.getElementById('qrLargeAddr').textContent = address || '';
    var btn = document.getElementById('copyLargeAddrBtn');
    if (btn) { btn.setAttribute('data-copy-address', address || ''); btn.innerHTML = langCopyBtnHtml; btn.disabled = false; }
    var amtNumEl = document.getElementById('qrLargeAmountNum');
    if (amtNumEl) {
      if (amount !== null && amount !== undefined && amount !== '') {
        amtNumEl.textContent = (Number(amount) || 0).toFixed(2);
      } else {
        amtNumEl.textContent = '--';
      }
    }
    var netEl = document.getElementById('qrLargeNetwork');
    if (netEl) {
      netEl.textContent = langQrNetworkPrefix + ggaiNetworkLabelShort(networkLabel);
    }
    ggaiShowQrLargeModal();
  }catch(e){ console.error(e); }
}

ggaiWhenJqueryReady(function() {
  $(document).on('click', '#qrLargeCloseBtn, #qrLargeModal .close', function(e){
    e.preventDefault();
    ggaiHideQrLargeModal();
  });
  $(document).on('click', '.copy-address', function(){
    var $btn = $(this);
    var addr = $btn.data('copy-address') || '';
    if(!addr){ return; }
    var oldHtml = $btn.html();
    navigator.clipboard.writeText(addr).then(function(){
      $btn.prop('disabled', true).html(langCopiedBtnHtml);
      setTimeout(function(){ $btn.prop('disabled', false).html(oldHtml); }, 1500);
    }, function(){
      $btn.prop('disabled', true).html(langCopyFailBtnHtml);
      setTimeout(function(){ $btn.prop('disabled', false).html(oldHtml); }, 1500);
    });
  });
});
</script>
<?php
$pageContent = ob_get_clean();
if ($pageContent === false) {
    $pageContent = '';
}
if (strlen(trim((string) $pageContent)) < 80) {
    @file_put_contents(
        dirname(__DIR__) . '/logs/deposit_render.log',
        date('Y-m-d H:i:s') . ' empty_buffer len=' . strlen((string) $pageContent)
            . ' user_id=' . (int) $user_id
            . ' ob_level=' . ob_get_level()
            . ' uri=' . ($_SERVER['REQUEST_URI'] ?? '') . "\n",
        FILE_APPEND
    );
    $depositEmptyHtml = __t('deposit_render_empty', '充值页内容未能加载（输出缓冲为空）。请刷新本页；若仍失败请查看服务器 logs/deposit_render.log。');
    $depositRefreshUrl = htmlspecialchars(function_exists('ggai_member_url_with_impersonate') ? ggai_member_url_with_impersonate('/user/deposit.php') : '/user/deposit.php', ENT_QUOTES);
    $depositRefreshLabel = htmlspecialchars(__t('deposit_btn_refresh_page', __t('cw_chain_btn_refresh', '刷新本页')), ENT_QUOTES);
    $pageContent = '<div class="alert alert-danger m-3">' . htmlspecialchars($depositEmptyHtml, ENT_QUOTES)
        . ' <a href="' . $depositRefreshUrl . '">' . $depositRefreshLabel . '</a></div>';
}
if (session_status() === PHP_SESSION_ACTIVE) {
    session_write_close();
}
require_once __DIR__ . '/includes/layout.php';
?> 