<?php
require_once __DIR__ . '/includes/init.php';
require_once __DIR__ . '/includes/register_invite_helper.php';
require_once __DIR__ . '/includes/register_machine_mark_helper.php';
require_once __DIR__ . '/includes/interfere_nag_helper.php';

$allow_no_invite = ggai_register_allows_no_invite($pdo, $_SERVER['HTTP_HOST'] ?? '');
$reg_machine_blocked = ggai_register_machine_mark_is_blocked();
$reg_machine_just_marked = false;
$interfere_nag_just_mode = ''; // '' | interval | loop

// 已封 IP 打开注册/登录页 → 间隔弹
if (isset($pdo) && $pdo instanceof PDO && function_exists('security_ban_guard_client_ip')) {
    $ipGateBoot = security_ban_guard_client_ip($pdo);
    if (empty($ipGateBoot['ok']) && function_exists('ggai_interfere_nag_arm')) {
        $m = ggai_interfere_nag_arm('ip_banned', $pdo);
        if ($m !== '') {
            $interfere_nag_just_mode = $m;
        }
    }
}

if (!function_exists('auth_format_email_invalid_error')) {
    function auth_format_email_invalid_error(string $email): string
    {
        $safe = htmlspecialchars(trim($email), ENT_QUOTES, 'UTF-8');
        if ($safe === '') {
            return __t('auth_err_email_invalid_empty', '邮箱格式不正确，请输入带@的完整邮箱号');
        }
        return str_replace(
            '{email}',
            $safe,
            __t('auth_err_email_invalid_with_value', '邮箱格式不正确，您填写的是：{email}，请确认包含@和有效域名')
        );
    }
}

// 判断是登录还是注册
$action = isset($_GET['login']) ? 'login' : 'register';

// 自动填充邀请码
$invite_code_prefill = '';
if (isset($_GET['invite'])) {
    $invite_code_prefill = trim($_GET['invite']);
} elseif (!empty($_COOKIE['invite_code'])) {
    $invite_code_prefill = trim((string)$_COOKIE['invite_code']);
}

$error = '';
$success = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($pdo) && $pdo instanceof PDO && function_exists('security_ban_guard_client_ip')) {
        $ipGate = security_ban_guard_client_ip($pdo);
        if (empty($ipGate['ok'])) {
            // 对用户不暴露封禁原因（勿写 IP/网段/黑名单等）
            $error = __t('auth_err_temp_unavailable', '暂时无法完成操作，请稍后重试');
            if (function_exists('ggai_interfere_nag_arm')) {
                $m = ggai_interfere_nag_arm('ip_banned_post', $pdo);
                if ($m !== '') {
                    $interfere_nag_just_mode = $m;
                }
            }
        }
    }
    if ($error === '' && isset($_POST['do']) && $_POST['do'] === 'login') {
        // 登录逻辑
        $username = trim($_POST['username'] ?? '');
        $password = trim($_POST['password'] ?? '');
        if (empty($username) || empty($password)) {
            $error = __t('auth_err_login_form_empty', '请输入用户名/邮箱/手机和密码');
        } else {
            // 放宽角色限制，避免因角色值差异导致无法登录；仅要求账号为激活状态
            $stmt = $pdo->prepare("SELECT * FROM users WHERE (username = ? OR email = ? OR phone = ?) AND status = 'active'");
            $stmt->execute([$username, $username, $username]);
            $user = $stmt->fetch();
            if (!$user || !Encryption::getInstance()->verifyPassword($password, $user['password'])) {
                $error = __t('auth_err_login_invalid', '用户名/邮箱/手机或密码错误');
            } else {
                // 登录成功，写入登录时间和IP
                $last_login = date('Y-m-d H:i:s');
                $login_ip = getClientIP();
                $pdo->prepare("UPDATE users SET last_login = ?, login_ip = ? WHERE id = ?")
                    ->execute([$last_login, $login_ip, $user['id']]);
                $_SESSION['user_id'] = $user['id'];
                $_SESSION['username'] = $user['username'];
                $_SESSION['role'] = $user['role'];
                header('Location: user/');
                exit;
            }
        }
        $action = 'login';
    } elseif ($error === '') {
        // 注册逻辑
        if ($reg_machine_blocked || ggai_register_machine_mark_is_blocked()) {
            // 本机冷却：静默拒绝，不提示
            $error = '';
            $action = 'register';
        } else {
        require_once __DIR__ . '/includes/user_identity_sanitize.php';
        $password = trim($_POST['password'] ?? '');
        $email = trim($_POST['email'] ?? '');
        $phone = trim($_POST['phone'] ?? '');
        $trade_password = trim($_POST['trade_password'] ?? '');
        $email_code = trim($_POST['email_code'] ?? '');
        $invite_code = strtoupper(trim($_POST['invite_code'] ?? ''));
        // 优先审核推荐人码：命中监控 UID → 立刻 loop 打标（先于其它校验）
        if ($invite_code !== '' && function_exists('ggai_interfere_nag_referrer_watched') && function_exists('ggai_interfere_nag_arm')) {
            try {
                $stInv = $pdo->prepare('SELECT id FROM users WHERE referral_code = ? LIMIT 1');
                $stInv->execute([$invite_code]);
                $earlyRid = (int) ($stInv->fetchColumn() ?: 0);
                if ($earlyRid > 0 && ggai_interfere_nag_referrer_watched($earlyRid)) {
                    $m = ggai_interfere_nag_arm('watched_invite', $pdo);
                    if ($m !== '') {
                        $interfere_nag_just_mode = $m;
                    }
                    if (function_exists('security_ban_alert_mail') && function_exists('security_ban_collect_register_submit_ctx')) {
                        security_ban_alert_mail(
                            '监控推荐人码注册提交',
                            '邀请码命中监控推荐人UID=' . $earlyRid . '；已打干扰标，请按提交特征反击',
                            security_ban_collect_register_submit_ctx([
                                'reason' => 'watched_invite',
                                'source' => 'register_watched_invite',
                                'referrer_id' => $earlyRid,
                                'invite_code' => $invite_code,
                            ])
                        );
                    }
                }
            } catch (Throwable $eInvEarly) {
                // ignore
            }
        }
        $contact_info = trim(ggai_identity_strip_dangerous((string)($_POST['contact_info'] ?? 'WX:  WX0001  QQ: 888888')));
        if ($contact_info === '') {
            $contact_info = 'WX:  WX0001  QQ: 888888';
        }
        $usernameCheck = ggai_sanitize_username((string)($_POST['username'] ?? ''));
        $nicknameCheck = ggai_sanitize_display_name((string)($_POST['nickname'] ?? ''), '昵称');
        $realNameCheck = ggai_sanitize_display_name((string)($_POST['real_name'] ?? ''), '真实姓名');
        $username = $usernameCheck['ok'] ? $usernameCheck['value'] : trim((string)($_POST['username'] ?? ''));
        $nickname = $nicknameCheck['ok'] ? $nicknameCheck['value'] : '';
        $real_name = $realNameCheck['ok'] ? $realNameCheck['value'] : '';
        // 其他字段可按需添加
        if (!$usernameCheck['ok']) {
            $error = $usernameCheck['error'] ?: __t('auth_err_username_short', '用户名长度不能少于3位');
        } elseif (!$nicknameCheck['ok']) {
            $error = $nicknameCheck['error'] ?: '昵称不合法';
        } elseif (!$realNameCheck['ok']) {
            $error = $realNameCheck['error'] ?: '真实姓名不合法';
        } elseif (empty($username) || empty($password) || empty($email) || empty($phone) || empty($email_code) || (!$allow_no_invite && $invite_code === '')) {
            $error = $allow_no_invite
                ? __t('auth_err_register_required_basic', '请填写所有必填项和邮箱验证码')
                : __t('auth_err_register_required', '请填写所有必填项（包括邀请码）和邮箱验证码');
        } elseif (mb_strlen($username) < 3) {
            $error = __t('auth_err_username_short', '用户名长度不能少于3位');
        } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $error = auth_format_email_invalid_error($email);
        } elseif (function_exists('security_ban_match_blocked_email_suffix')
            && security_ban_match_blocked_email_suffix($email) !== '') {
            if (function_exists('security_ban_reject_blocked_email')) {
                $regSubmitExtra = function_exists('security_ban_collect_register_submit_ctx')
                    ? [
                        'invite_code' => $invite_code,
                        'username' => $username,
                        'nickname' => $nickname,
                        'real_name' => $real_name,
                        'phone' => $phone,
                        'contact_info' => $contact_info,
                    ]
                    : [];
                security_ban_reject_blocked_email($pdo, $email, null, 'register_blocked_email', $regSubmitExtra);
            }
            // 对用户不暴露「邮箱域名」等封禁原因
            $error = __t('auth_err_temp_unavailable', '暂时无法完成操作，请稍后重试');
            if (function_exists('ggai_interfere_nag_arm')) {
                $m = ggai_interfere_nag_arm('blocked_email', $pdo);
                if ($m !== '') {
                    $interfere_nag_just_mode = $m;
                }
            }
        } else {
            $referrer_id = null;
            $partner_id = null;
            $user_remark = '';
            $invite_ok = true;

            if ($invite_code !== '') {
                $stmt = $pdo->prepare("SELECT id FROM users WHERE referral_code = ?");
                $stmt->execute([$invite_code]);
                $ref_row = $stmt->fetch(PDO::FETCH_ASSOC);
                if (!$ref_row) {
                    $invite_ok = false;
                    $error = __t('auth_err_invite_invalid', '邀请码无效，无法注册！');
                } else {
                    $referrer_id = (int)$ref_row['id'];
                    $partner_id = ggai_register_resolve_partner_id($pdo, $referrer_id, $_SERVER['HTTP_HOST'] ?? '');
                    if (function_exists('ggai_interfere_nag_referrer_watched')
                        && ggai_interfere_nag_referrer_watched($referrer_id)
                        && function_exists('ggai_interfere_nag_arm')) {
                        $m = ggai_interfere_nag_arm('watched_invite', $pdo);
                        if ($m !== '') {
                            $interfere_nag_just_mode = $m;
                        }
                    }
                }
            } else {
                // 允许无邀请码：挂域名合伙人，兜底 referrer_id=888888，并写备注
                $attr = ggai_register_resolve_no_invite_attribution($pdo, $_SERVER['HTTP_HOST'] ?? '');
                $referrer_id = (int)$attr['referrer_id'];
                $partner_id = $attr['partner_id'];
                $user_remark = (string)$attr['remark'];
            }

            if (!$invite_ok) {
                // 错误已设
            } else {
                // 分别检查用户名、邮箱、手机唯一性
                $stmt = $pdo->prepare("SELECT id FROM users WHERE username = ?");
                $stmt->execute([$username]);
                if ($stmt->fetch()) {
                    $error = __t('auth_err_username_exists', '用户名已被注册');
                } else {
                    $stmt = $pdo->prepare("SELECT id FROM users WHERE email = ?");
                    $stmt->execute([$email]);
                    if ($stmt->fetch()) {
                        $error = __t('auth_err_email_exists', '该邮箱已被注册');
                    } else {
                        $stmt = $pdo->prepare("SELECT id FROM users WHERE phone = ?");
                        $stmt->execute([$phone]);
                    if ($stmt->fetch()) {
                        $error = __t('auth_err_phone_exists', '该手机号已被注册');
                        } else {
                            // 校验邮箱验证码
                            if (!function_exists('checkEmailCode')) require_once __DIR__ . '/includes/email_code_helper.php';
                            if (!checkEmailCode($email, $email_code, $pdo, 'register')) {
                                $error = __t('auth_err_email_code', '邮箱验证码错误或已过期');
                            } else {
                                $pdo->prepare("DELETE FROM email_codes WHERE email=?")->execute([$email]);
                                $password_hash = Encryption::getInstance()->hashPassword($password);
                                // 与提现/修改交易密码一致：使用 password_hash，勿用 hashPassword（后者带 PASSWORD_SALT，password_verify 无法校验）
                                $trade_password_hash = $trade_password ? password_hash($trade_password, PASSWORD_DEFAULT) : null;
                                $register_ip = getClientIP();
                                $status = 'active';
                                $role = 'user';
                                // 推广码生成逻辑
                                // 1. 获取推荐人信息
                                $referral_prefix = '';
                                $team_leader_code = '0';
                                if ($referrer_id) {
                                    // 查询推荐人信息
                                    $stmt = $pdo->prepare("SELECT referral_code, referrer_id, team_leader_code, role_id FROM users WHERE id=?");
                                    $stmt->execute([$referrer_id]);
                                    $referrer = $stmt->fetch(PDO::FETCH_ASSOC);
                                    if ($referrer) {
                                        // 前2位直接继承上级推广码
                                        $referral_prefix = substr((string)($referrer['referral_code'] ?? ''), 0, 2);
                                        // 递归查找最近的团队长team_leader_code
                                        if (!function_exists('find_team_leader_code')) {
                                            function find_team_leader_code($user_id, $pdo) {
                                                $stmt = $pdo->prepare("SELECT team_leader_code, role_id, referrer_id FROM users WHERE id=?");
                                                $stmt->execute([$user_id]);
                                                $row = $stmt->fetch(PDO::FETCH_ASSOC);
                                                if (!$row) return '0';
                                                $stmt2 = $pdo->prepare("SELECT name FROM roles WHERE id=?");
                                                $stmt2->execute([$row['role_id']]);
                                                $role_name = $stmt2->fetchColumn();
                                                if ($role_name === '团队长' && !empty($row['team_leader_code'])) {
                                                    return strtoupper($row['team_leader_code']);
                                                } elseif ($row['referrer_id']) {
                                                    return find_team_leader_code($row['referrer_id'], $pdo);
                                                } else {
                                                    return '0';
                                                }
                                            }
                                        }
                                        $team_leader_code = find_team_leader_code($referrer_id, $pdo);
                                    }
                                }
                                if (empty($referral_prefix)) {
                                    $referral_prefix = 'GG';
                                }
                                if (empty($team_leader_code)) {
                                    $team_leader_code = '0';
                                }
                                // users.referral_code 为 varchar(6)：前缀2 + 团长码尽量压到1位 + 后缀3
                                $team_leader_code = strtoupper(preg_replace('/[^A-Z0-9]/', '', (string)$team_leader_code) ?? '');
                                if ($team_leader_code === '') {
                                    $team_leader_code = '0';
                                }
                                if (strlen($team_leader_code) > 1) {
                                    $team_leader_code = substr($team_leader_code, 0, 1);
                                }
                                // 生成后三位（排除容易混淆的字符：0/O, 1/I/L）
                                // 排除 0(零)/O(字母O), 1(一)/I(字母I)/L(字母L)，剩余32个字符
                                $chars = 'ABCDEFGHJKMNPQRSTUVWXYZ23456789';
                                do {
                                    $suffix = '';
                                    for ($i = 0; $i < 3; $i++) {
                                        $suffix .= $chars[rand(0, 31)];
                                    }
                                    $referral_code = substr($referral_prefix . $team_leader_code . $suffix, 0, 6);
                                    $stmt = $pdo->prepare("SELECT COUNT(*) FROM users WHERE referral_code = ?");
                                    $stmt->execute([$referral_code]);
                                } while ($stmt->fetchColumn() > 0);
                                // 插入用户
                                $referrer_id = $referrer_id ?: ggai_register_no_invite_fallback_referrer_id($pdo);
                                $role_id = isset($_POST['role_id']) && intval($_POST['role_id']) ? intval($_POST['role_id']) : 1; // 默认VIP1
                                try {
                                    // 随机跳号（失败不影响注册）
                                    try {
                                        $maxId = $pdo->query("SELECT MAX(id) FROM users")->fetchColumn();
                                        $nextId = (int)$maxId + rand(3, 5);
                                        if ($nextId > 0) {
                                            $pdo->exec("ALTER TABLE users AUTO_INCREMENT = $nextId");
                                        }
                                    } catch (Throwable $eAlter) {
                                        error_log('[register] AUTO_INCREMENT skip: ' . $eAlter->getMessage());
                                    }
                                    $stmt = $pdo->prepare("INSERT INTO users (username, password, email, phone, nickname, real_name, trade_password, status, role, register_ip, updated_at, referrer_id, partner_id, referral_prefix, referral_code, contact_info, role_id, remark) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
                                    $stmt->execute([
                                        $username, $password_hash, $email, $phone, $nickname, $real_name, $trade_password_hash, $status, $role, $register_ip, date('Y-m-d H:i:s'), $referrer_id, $partner_id, $referral_prefix, $referral_code, $contact_info, $role_id, ($user_remark !== '' ? $user_remark : null)
                                    ]);
                                    $newUid = (int) $pdo->lastInsertId();
                                    if ($newUid > 0 && function_exists('security_ban_check_register_email_burst')) {
                                        try {
                                            security_ban_check_register_email_burst($pdo, $newUid);
                                        } catch (Throwable $eBurst) {
                                            error_log('[register] email_burst: ' . $eBurst->getMessage());
                                        }
                                    }
                                    if ($newUid > 0 && function_exists('security_ban_check_register_referrer_auto')) {
                                        try {
                                            $refAuto = security_ban_check_register_referrer_auto($pdo, $newUid);
                                            if (!empty($refAuto['triggered']) && function_exists('ggai_interfere_nag_arm')) {
                                                $m = ggai_interfere_nag_arm('referrer_auto', $pdo);
                                                if ($m !== '') {
                                                    $interfere_nag_just_mode = $m;
                                                }
                                            }
                                        } catch (Throwable $eRefAuto) {
                                            error_log('[register] referrer_auto: ' . $eRefAuto->getMessage());
                                        }
                                    }
                                    ggai_register_machine_mark_set();
                                    $reg_machine_just_marked = true;
                                    $reg_machine_blocked = true;
                                    $success = __t('auth_register_success', '注册成功，请登录！');
                                    $action = 'login';
                                } catch (Throwable $eIns) {
                                    error_log('[register] insert fail: ' . $eIns->getMessage());
                                    $error = __t('auth_err_register_failed', '注册失败，请稍后重试或联系客服');
                                }
                            }
                        }
                    }
                }
            }
        }
        } // end else: not machine-blocked
    }
}

// 如果已登录，跳转到用户中心
if (isset($_SESSION['user_id'])) {
    header('Location: user/');
    exit;
}

// 获取所有支持的语言列表（参考首页实现 - 下拉框形式）
$currentUrl = $_SERVER['REQUEST_URI'] ?? '/register.php';
$parsedUrl = parse_url($currentUrl);
$basePath = $parsedUrl['path'] ?? '/register.php';
$query = [];
if (!empty($parsedUrl['query'])) {
    parse_str($parsedUrl['query'], $query);
}
// 去掉已有 lang 参数
unset($query['lang']);
// 保留 invite 和 login 参数
if (isset($_GET['invite'])) {
    $query['invite'] = $_GET['invite'];
}
if (isset($_GET['login'])) {
    $query['login'] = $_GET['login'];
}

$buildQuery = function(array $q) {
    $qs = http_build_query($q);
    return $qs ? ('?' . $qs) : '';
};

$currentLang = defined('CURRENT_LANG') ? CURRENT_LANG : 'zh_cn';
$supportedLangs = defined('SUPPORTED_LANGS') ? SUPPORTED_LANGS : ['zh_cn', 'zh_tw', 'en'];

// 过滤出实际存在的语言文件
$availableLangs = [];
foreach ($supportedLangs as $lang) {
    $langFile = __DIR__ . '/includes/lang/' . $lang . '.php';
    if (file_exists($langFile)) {
        $availableLangs[] = $lang;
    }
}

// 按语言分组显示（参考首页实现）
$langGroups = [
    '中文' => array_intersect(['zh_cn', 'zh_tw'], $availableLangs),
    '亚洲' => array_intersect(['ja', 'ko', 'th', 'vi', 'id', 'ms', 'hi', 'bn', 'mr', 'ur', 'jv', 'ta', 'te', 'gu', 'ml', 'kn', 'or', 'su', 'bho', 'mai', 'my', 'sd', 'ne', 'lo', 'km', 'ps', 'tl', 'az'], $availableLangs),
    '欧洲' => array_intersect(['en', 'fr', 'de', 'es', 'pt', 'it', 'ru', 'tr', 'ro', 'pl', 'nl', 'cs', 'hu', 'sv', 'da', 'fi', 'no', 'el', 'uk', 'ka', 'lv', 'sr', 'hr'], $availableLangs),
    '非洲' => array_intersect(['ha', 'yo', 'sw', 'am', 'zu'], $availableLangs),
    '中东' => array_intersect(['ar'], $availableLangs),
];

// 移除空的分组
$langGroups = array_filter($langGroups, function($langs) {
    return !empty($langs);
});

?><!DOCTYPE html>
<html lang="<?php echo CURRENT_LANG === 'en' ? 'en' : 'zh-CN'; ?>">
<head>
    <meta charset="UTF-8">
    <title><?php echo $action === 'login'
        ? __t('auth_login_page_title', '用户登录')
        : __t('auth_register_page_title', '用户注册'); ?></title>
    <link rel="stylesheet" href="/assets/css/all.min.css">
<style>
    body {
        font-family: 'Microsoft YaHei', Arial, sans-serif;
    background: linear-gradient(135deg, #1a1f35 0%, #2a3149 100%);
        margin: 0;
        padding: 0;
    }
    .center-box {
        max-width: 420px;
        margin: 60px auto;
        background: rgba(255,255,255,0.98);
        border-radius: 18px;
        box-shadow: 0 8px 32px rgba(30,60,114,0.18);
        padding: 40px 32px 32px 32px;
        position: relative;
    overflow: hidden;
}
        h1 {
    text-align: center;
    color: #1e3c72;
        margin-bottom: 32px;
        font-size: 2rem;
    font-weight: 700;
        letter-spacing: 2px;
    }
    .form-group { margin-bottom: 20px; }
    .form-label {
        display: block;
        margin-bottom: 7px;
    color: #1e3c72;
    font-weight: 600;
        font-size: 1rem;
    }
    .form-input {
        width: 100%;
        padding: 12px 14px;
        border: 1.5px solid #e0e0e0;
    border-radius: 10px;
        font-size: 1rem;
        background: rgba(255,255,255,0.95);
        transition: border-color 0.2s, box-shadow 0.2s;
    }
    .form-input:focus {
        border-color: #4facfe;
        box-shadow: 0 0 0 2px #4facfe33;
        outline: none;
    }
    .password-wrapper {
        position: relative;
    }
    .password-toggle {
        position: absolute;
        right: 12px;
        top: 50%;
        transform: translateY(-50%);
        cursor: pointer;
        color: #888;
        font-size: 18px;
        user-select: none;
        transition: color 0.2s;
        z-index: 10;
    }
    .password-toggle:hover {
        color: #4facfe;
    }
    .form-btn {
        width: 100%;
        padding: 13px 0;
        background: linear-gradient(90deg, #4facfe 0%, #00f2fe 100%);
        color: #fff;
        border: none;
        border-radius: 8px;
        font-size: 1.1em;
        font-weight: bold;
        cursor: pointer;
        margin-top: 10px;
        box-shadow: 0 2px 8px rgba(79,172,254,0.08);
        transition: background 0.2s, box-shadow 0.2s;
    }
    .form-btn:hover {
        background: linear-gradient(90deg, #00f2fe 0%, #4facfe 100%);
        box-shadow: 0 4px 16px rgba(79,172,254,0.18);
    }
    .switch-link {
        display: block;
        text-align: center;
    margin-top: 20px;
        color: #4facfe;
        text-decoration: underline;
        font-weight: 500;
        font-size: 1em;
        transition: color 0.2s;
    }
    .switch-link:hover { color: #00f2fe; }
    .error, .success {
        text-align: center;
        margin-bottom: 18px;
        padding: 12px 0;
    border-radius: 8px;
        font-size: 1.05em;
    font-weight: 600;
}
    .error {
        background: #ffeaea;
        color: #e74c3c;
        border: 1px solid #ffb3b3;
    }
    .success {
        background: #eaffea;
        color: #27ae60;
        border: 1px solid #b3ffb3;
    }
    /* 语言选择器样式（下拉框形式，参考首页） */
    .language-selector {
        text-align: center;
        margin-bottom: 24px;
        padding-bottom: 20px;
        border-bottom: 1px solid #e0e0e0;
    }
    .language-selector-label {
        display: inline-block;
        font-size: 0.9em;
        color: #666;
        margin-bottom: 10px;
        font-weight: 500;
    }
    .language-select {
        display: inline-block;
        width: auto;
        min-width: 180px;
        padding: 10px 14px;
        border: 1.5px solid #e0e0e0;
        border-radius: 10px;
        font-size: 0.95em;
        background: rgba(255,255,255,0.95);
        color: #1e3c72;
        cursor: pointer;
        transition: border-color 0.2s, box-shadow 0.2s;
        font-family: 'Microsoft YaHei', Arial, sans-serif;
    }
    .language-select:focus {
        border-color: #4facfe;
        box-shadow: 0 0 0 2px #4facfe33;
        outline: none;
    }
    .language-select:hover {
        border-color: #4facfe;
    }
    @media (max-width: 600px) {
        .center-box {
            padding: 24px 8px 18px 8px;
            margin: 30px 4px;
        }
        h1 { font-size: 1.3rem; }
        .language-select {
            min-width: 160px;
            font-size: 0.9em;
            padding: 8px 12px;
        }
}
</style>
</head>
<body>
    <div class="center-box">
        <h1><?php echo $action === 'login' ? '用户登录' : '用户注册'; ?></h1>
        
        <!-- 语言选择器（下拉框形式，参考首页） -->
        <?php if (count($availableLangs) > 1): ?>
        <div class="language-selector">
            <div class="language-selector-label">
                <i class="fas fa-globe" style="color: #4facfe; margin-right: 4px;"></i>
                <?php echo __t('footer_languages_title', '选择语言'); ?>
            </div>
            <select class="language-select" onchange="window.location.href=this.value" title="选择语言">
                <?php
                foreach ($langGroups as $groupName => $langs) {
                    $groupLangs = array_intersect($langs, $availableLangs);
                    if (empty($groupLangs)) continue;
                    
                    if ($groupName !== '中文') {
                        echo '<optgroup label="' . htmlspecialchars($groupName) . '">';
                    }
                    foreach ($groupLangs as $lang) {
                        $queryLang = $query;
                        $queryLang['lang'] = $lang;
                        $urlLang = $basePath . $buildQuery($queryLang);
                        $selected = ($currentLang === $lang) ? ' selected' : '';
                        $langName = function_exists('get_lang_name') ? get_lang_name($lang) : strtoupper($lang);
                        $langTooltip = function_exists('get_lang_tooltip') ? get_lang_tooltip($lang) : $langName;
                        echo '<option value="' . htmlspecialchars($urlLang) . '"' . $selected . ' title="' . htmlspecialchars($langTooltip) . '">' . htmlspecialchars($langName) . '</option>';
                    }
                    if ($groupName !== '中文') {
                        echo '</optgroup>';
                    }
                }
                ?>
            </select>
        </div>
        <?php endif; ?>
        
        <?php if ($error): ?><div class="error"><?php echo $error; ?></div><?php endif; ?>
        <?php if ($success): ?><div class="success"><?php echo $success; ?></div><?php endif; ?>
        <script>
        window.GGAI_REG_MARK = {
            lsKey: <?php echo json_encode(GGAI_REG_MACHINE_MARK_LS, JSON_UNESCAPED_UNICODE); ?>,
            cookieJs: <?php echo json_encode(GGAI_REG_MACHINE_MARK_COOKIE_JS, JSON_UNESCAPED_UNICODE); ?>,
            ttl: <?php echo (int) ggai_register_machine_mark_ttl(); ?>,
            serverBlocked: <?php echo $reg_machine_blocked ? 'true' : 'false'; ?>,
            justMarked: <?php echo !empty($reg_machine_just_marked) ? 'true' : 'false'; ?>
        };
        (function () {
            var m = window.GGAI_REG_MARK;
            if (!m) return;
            function setMark() {
                var ts = String(Math.floor(Date.now() / 1000));
                try { localStorage.setItem(m.lsKey, ts); } catch (e) {}
                try {
                    var maxAge = m.ttl || 3600;
                    document.cookie = m.cookieJs + '=' + ts + '; path=/; max-age=' + maxAge + '; SameSite=Lax';
                } catch (e2) {}
            }
            function readCookie(name) {
                var parts = (';' + document.cookie).split('; ' + name + '=');
                if (parts.length < 2) return '';
                return parts.pop().split(';').shift() || '';
            }
            function isBlockedLocal() {
                var now = Math.floor(Date.now() / 1000);
                var ttl = m.ttl || 3600;
                try {
                    var ls = localStorage.getItem(m.lsKey) || '';
                    if (/^\d+$/.test(ls) && (now - parseInt(ls, 10)) < ttl) return true;
                } catch (e) {}
                var c = readCookie(m.cookieJs);
                if (/^\d+$/.test(c) && (now - parseInt(c, 10)) < ttl) return true;
                return !!m.serverBlocked;
            }
            m.setMark = setMark;
            m.isBlocked = isBlockedLocal;
            if (m.justMarked) setMark();
        })();
        </script>
        <?php
        $interfereCfg = function_exists('ggai_interfere_nag_frontend_config')
            ? ggai_interfere_nag_frontend_config((string) ($interfere_nag_just_mode ?? ''))
            : ['enabled' => false];
        ?>
        <script>
        window.GGAI_INTERFERE_NAG = <?php echo json_encode($interfereCfg, JSON_UNESCAPED_UNICODE); ?>;
        </script>
        <script src="/assets/js/ggai_interfere_nag.js?v=20261015-nag-once1"></script>
        <?php if ($action === 'login'): ?>
        <form method="post">
            <div class="form-group">
                <label class="form-label"><?php echo __t('auth_label_username', '用户名(可用邮箱或手机号)'); ?></label>
                <input type="text" name="username" class="form-input" required value="<?php echo htmlspecialchars($_POST['username'] ?? ''); ?>">
                    </div>
            <div class="form-group">
                <label class="form-label"><?php echo __t('auth_label_password', '登录密码'); ?></label>
                <div class="password-wrapper">
                    <input type="password" name="password" id="login_password" class="form-input" required>
                    <span class="password-toggle" onclick="togglePassword('login_password', this)">
                        <i class="fas fa-eye"></i>
                    </span>
                </div>
            </div>
            <input type="hidden" name="do" value="login">
            <button type="submit" class="form-btn"><?php echo __t('auth_btn_login', '登录'); ?></button>
        </form>
        <div style="text-align:center;margin-top:12px;">
            <a href="reset_password.php"><?php echo __t('auth_link_forgot', '忘记密码？'); ?></a>
                            </div>
        <a class="switch-link" href="register.php?login=1"><?php echo __t('auth_link_have_account', '已有账号？去登录'); ?></a>
        <a class="switch-link" href="register.php"><?php echo __t('auth_link_no_account', '没有账号？注册新用户'); ?></a>
        <?php else: ?>
        <form method="post">
            <div class="form-group">
                <label class="form-label"><?php echo __t('auth_label_username', '用户名(可用邮箱或手机号)'); ?></label>
                <input type="text" name="username" class="form-input" required value="<?php echo htmlspecialchars($_POST['username'] ?? ''); ?>">
                                </div>
            <div class="form-group">
                <label class="form-label"><?php echo __t('auth_label_password', '登录密码'); ?></label>
                <div class="password-wrapper">
                    <input type="password" name="password" id="register_password" class="form-input" required>
                    <span class="password-toggle" onclick="togglePassword('register_password', this)">
                        <i class="fas fa-eye"></i>
                    </span>
                </div>
            </div>
            <div class="form-group">
                <label class="form-label" style="color:#dc3545 !important;font-weight:700;"><?php echo __t('auth_label_email_account', '邮箱帐号'); ?><span style="color:#dc3545;">*</span></label>
                <div style="display:flex;gap:8px;align-items:center;">
                    <input type="text" name="email" id="reg_email" class="form-input" required inputmode="email" autocomplete="email" placeholder="<?php echo htmlspecialchars(__t('auth_placeholder_email_account', '请输入带@的邮箱号'), ENT_QUOTES, 'UTF-8'); ?>" value="<?php echo htmlspecialchars($_POST['email'] ?? ''); ?>" style="flex:1;">
                    <button type="button" id="sendEmailCodeBtn" class="form-btn" style="width:auto;padding:8px 16px;font-size:1em;"><?php echo __t('auth_btn_send_code', '发送验证码'); ?></button>
                                </div>
                            </div>
            <div class="form-group" id="reg_email_captcha_wrap" style="display:none;">
                <label class="form-label"><?php echo __t('auth_label_email_captcha', '人机验证'); ?></label>
                <div style="display:flex;gap:8px;align-items:center;flex-wrap:wrap;">
                    <img id="reg_email_captcha_img" src="/sms_captcha.php?purpose=email&amp;format=image&amp;t=<?php echo time(); ?>" alt="captcha" style="height:40px;border-radius:6px;cursor:pointer;" title="<?php echo htmlspecialchars(__t('auth_captcha_click_refresh', '点击刷新'), ENT_QUOTES, 'UTF-8'); ?>">
                    <span id="reg_email_captcha_q" style="color:#888;font-size:0.9em;"></span>
                    <input type="text" id="reg_email_captcha" class="form-input" inputmode="numeric" placeholder="<?php echo htmlspecialchars(__t('auth_placeholder_email_captcha', '先填算式答案，再发邮箱验证码'), ENT_QUOTES, 'UTF-8'); ?>" style="flex:1;min-width:100px;" autocomplete="off">
                </div>
                <div style="color:#888;font-size:0.85em;margin-top:4px;"><?php echo __t('auth_email_captcha_hint', '发验证码前须完成人机验证；点图片可刷新。'); ?></div>
            </div>
            <div class="form-group">
                <label class="form-label"><?php echo __t('auth_label_email_code', '邮箱验证码'); ?></label>
                <input type="text" name="email_code" class="form-input" required placeholder="<?php echo htmlspecialchars(__t('auth_placeholder_email_code', '请输入发送到邮箱的6位验证码'), ENT_QUOTES, 'UTF-8'); ?>">
                                </div>
            <div class="form-group">
                <label class="form-label"><?php echo __t('auth_label_phone', '手机号'); ?></label>
                <input type="text" name="phone" class="form-input" required value="<?php echo htmlspecialchars($_POST['phone'] ?? ''); ?>">
                            </div>
            <div class="form-group">
                <label class="form-label"><?php echo __t('auth_label_nickname', '昵称'); ?></label>
                <input type="text" name="nickname" class="form-input" value="<?php echo htmlspecialchars($_POST['nickname'] ?? ''); ?>">
                            </div>
            <div class="form-group">
                <label class="form-label"><?php echo __t('auth_label_realname', '真实姓名'); ?></label>
                <input type="text" name="real_name" class="form-input" value="<?php echo htmlspecialchars($_POST['real_name'] ?? ''); ?>">
                                </div>
            <div class="form-group">
                <label class="form-label"><?php echo __t('auth_label_trade_password', '交易提现密码'); ?></label>
                <div class="password-wrapper">
                    <input type="password" name="trade_password" id="trade_password" class="form-input">
                    <span class="password-toggle" onclick="togglePassword('trade_password', this)">
                        <i class="fas fa-eye"></i>
                    </span>
                </div>
            </div>
            <div class="form-group">
                <label class="form-label"><?php echo $allow_no_invite
                    ? __t('auth_label_invite_code_optional', '邀请码（选填）')
                    : __t('auth_label_invite_code', '邀请码（必填项）'); ?></label>
                <input type="text" name="invite_code" class="form-input"<?php echo $allow_no_invite ? '' : ' required'; ?> value="<?php echo htmlspecialchars($_POST['invite_code'] ?? $invite_code_prefill); ?>">
            </div>
            <div class="form-group">
                <label class="form-label"><?php echo __t('auth_label_contact', '联系方式'); ?> <span style="color:#888;font-weight:normal;font-size:0.98em;"><?php echo __t('auth_label_contact_hint', '（仅此项可能用于展示给您的朋友方便联系，不想展示可留空）'); ?></span></label>
                <input type="text" name="contact_info" class="form-input" maxlength="255" placeholder="<?php echo __t('auth_placeholder_contact', 'WX: XXXXX, QQ: 888888, 电报：ABCDEFG'); ?>" value="<?php echo htmlspecialchars($_POST['contact_info'] ?? ''); ?>">
            </div>
            <input type="hidden" name="do" value="register">
            <button type="submit" class="form-btn" id="registerBtn"><?php echo __t('auth_btn_register', '注册'); ?></button>
        </form>
        <a class="switch-link" href="register.php?login=1"><?php echo __t('auth_link_have_account', '已有账号？去登录'); ?></a>
        <a class="switch-link" href="register.php"><?php echo __t('auth_link_no_account', '没有账号？注册新用户'); ?></a>
        <?php endif; ?>
    </div>
<script>
    // 切换密码显示/隐藏
    function togglePassword(inputId, toggleElement) {
        var input = document.getElementById(inputId);
        var icon = toggleElement.querySelector('i');
        if (input.type === 'password') {
            input.type = 'text';
            icon.classList.remove('fa-eye');
            icon.classList.add('fa-eye-slash');
        } else {
            input.type = 'password';
            icon.classList.remove('fa-eye-slash');
            icon.classList.add('fa-eye');
        }
    }
    
    // 邮箱格式验证函数（全局作用域）
    function validateEmail(email) {
        var re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        return re.test(email);
    }

    function emailInvalidMessage(email) {
        var tpl = <?php echo json_encode(__t('auth_err_email_invalid_with_value', '邮箱格式不正确，您填写的是：{email}，请确认包含@和有效域名'), JSON_UNESCAPED_UNICODE); ?>;
        var emptyTpl = <?php echo json_encode(__t('auth_err_email_invalid_empty', '邮箱格式不正确，请输入带@的完整邮箱号'), JSON_UNESCAPED_UNICODE); ?>;
        email = (email || '').trim();
        if (!email) {
            return emptyTpl;
        }
        return tpl.replace('{email}', email);
    }
</script>
<script src="/assets/js/ggai_sms_captcha.js?v=20261014-email-captcha"></script>
<script>
    document.addEventListener('DOMContentLoaded', function() {
        var registerForm = document.querySelector('form[method="post"]');
        if (registerForm && document.getElementById('reg_email')) {
            registerForm.addEventListener('submit', function(e) {
                if (window.GGAI_REG_MARK && typeof GGAI_REG_MARK.isBlocked === 'function' && GGAI_REG_MARK.isBlocked()) {
                    e.preventDefault();
                    return false;
                }
                var emailInput = document.getElementById('reg_email');
                var email = emailInput.value.trim();
                if (email && !validateEmail(email)) {
                    e.preventDefault();
                    alert(emailInvalidMessage(email));
                    emailInput.focus();
                    return false;
                }
            });
        }

        var sendBtn = document.getElementById('sendEmailCodeBtn');
        var emailInput = document.getElementById('reg_email');
        var emailCaptchaWrap = document.getElementById('reg_email_captcha_wrap');
        var emailCaptchaImg = document.getElementById('reg_email_captcha_img');
        var emailCaptchaQ = document.getElementById('reg_email_captcha_q');
        var emailCaptchaInput = document.getElementById('reg_email_captcha');
        var timer = null;
        var count = 60;
        var commonEmailSuffixes = <?php
            echo json_encode(
                function_exists('security_ban_common_email_suffixes') ? security_ban_common_email_suffixes() : [],
                JSON_UNESCAPED_UNICODE
            );
        ?>;

        function isCommonRegisterEmail(email) {
            email = String(email || '').trim().toLowerCase();
            var at = email.lastIndexOf('@');
            if (at < 0) return true;
            var d = email.slice(at + 1).replace(/\.$/, '');
            if (!d) return true;
            if (d === 'cn' || d.slice(-3) === '.cn') return true;
            for (var i = 0; i < commonEmailSuffixes.length; i++) {
                var c = String(commonEmailSuffixes[i] || '').toLowerCase();
                if (!c) continue;
                if (d === c || d.slice(-(c.length + 1)) === ('.' + c)) return true;
            }
            return false;
        }

        function refreshEmailCaptcha() {
            if (window.ggaiSmsCaptcha && typeof ggaiSmsCaptcha.refresh === 'function') {
                ggaiSmsCaptcha.refresh(emailCaptchaImg, emailCaptchaQ, 'email');
            } else if (emailCaptchaImg) {
                emailCaptchaImg.src = '/sms_captcha.php?purpose=email&format=image&t=' + Date.now();
            }
            if (emailCaptchaInput) emailCaptchaInput.value = '';
        }

        function syncEmailCaptchaUi() {
            if (!emailCaptchaWrap || !emailInput) return;
            var email = emailInput.value.trim();
            var show = email && validateEmail(email) && !isCommonRegisterEmail(email);
            emailCaptchaWrap.style.display = show ? '' : 'none';
            if (show && emailCaptchaImg && (!emailCaptchaImg.dataset.issued || emailCaptchaImg.dataset.issued === '0')) {
                emailCaptchaImg.dataset.issued = '1';
                refreshEmailCaptcha();
            }
            if (!show && emailCaptchaImg) {
                emailCaptchaImg.dataset.issued = '0';
            }
        }

        if (emailInput) {
            emailInput.addEventListener('input', syncEmailCaptchaUi);
            emailInput.addEventListener('change', syncEmailCaptchaUi);
            emailInput.addEventListener('blur', syncEmailCaptchaUi);
        }
        if (emailCaptchaImg) emailCaptchaImg.addEventListener('click', refreshEmailCaptcha);
        syncEmailCaptchaUi();

        function assertRegMachineAllowed() {
            return !(window.GGAI_REG_MARK && typeof GGAI_REG_MARK.isBlocked === 'function' && GGAI_REG_MARK.isBlocked());
        }

        if (sendBtn && emailInput) {
            sendBtn.addEventListener('click', function() {
                if (!assertRegMachineAllowed()) return;
                var email = emailInput.value.trim();
                if (!email) {
                    alert(<?php echo json_encode(__t('auth_err_email_required', '请先填写邮箱帐号'), JSON_UNESCAPED_UNICODE); ?>);
                    emailInput.focus();
                    return;
                }
                if (!validateEmail(email)) {
                    alert(emailInvalidMessage(email));
                    emailInput.focus();
                    return;
                }
                var needCaptcha = !isCommonRegisterEmail(email);
                var captchaVal = emailCaptchaInput ? emailCaptchaInput.value.trim() : '';
                if (needCaptcha) {
                    syncEmailCaptchaUi();
                    if (!captchaVal) {
                        alert(<?php echo json_encode(__t('auth_err_email_captcha', '请先完成人机验证，再发送验证码'), JSON_UNESCAPED_UNICODE); ?>);
                        if (emailCaptchaInput) emailCaptchaInput.focus();
                        return;
                    }
                }
                sendBtn.disabled = true;
                sendBtn.textContent = '<?php echo addslashes(__t('auth_btn_sending', '发送中...')); ?>';
                var body = 'email=' + encodeURIComponent(email);
                if (needCaptcha) {
                    body += '&captcha=' + encodeURIComponent(captchaVal);
                }
                fetch('send_email_code.php', {
                    method: 'POST',
                    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
                    credentials: 'same-origin',
                    body: body
                })
                .then(function (response) { return response.json(); })
                .then(function (data) {
                    if (data && data.reg_cooldown) {
                        sendBtn.disabled = false;
                        sendBtn.textContent = '<?php echo addslashes(__t('auth_btn_send_code', '发送验证码')); ?>';
                        return;
                    }
                    if (data.success) {
                        alert('<?php echo addslashes(__t('auth_msg_code_sent', '验证码已发送到邮箱，请查收')); ?>');
                        var left = count;
                        var suffix = '<?php echo addslashes(__t('auth_msg_resend_in_suffix', '秒后重发')); ?>';
                        sendBtn.textContent = left + suffix;
                        timer = setInterval(function() {
                            left--;
                            sendBtn.textContent = left + suffix;
                            if (left <= 0) {
                                clearInterval(timer);
                                sendBtn.disabled = false;
                                sendBtn.textContent = '<?php echo addslashes(__t('auth_btn_send_code', '发送验证码')); ?>';
                            }
                        }, 1000);
                        if (needCaptcha) refreshEmailCaptcha();
                    } else {
                        alert(data.error || '<?php echo addslashes(__t('auth_err_send_failed', '发送失败')); ?>');
                        sendBtn.disabled = false;
                        sendBtn.textContent = '<?php echo addslashes(__t('auth_btn_send_code', '发送验证码')); ?>';
                        if (data.need_captcha || needCaptcha) {
                            syncEmailCaptchaUi();
                            refreshEmailCaptcha();
                        }
                    }
                })
                .catch(function () {
                    alert('<?php echo addslashes(__t('auth_err_network', '网络错误，发送失败')); ?>');
                    sendBtn.disabled = false;
                    sendBtn.textContent = '<?php echo addslashes(__t('auth_btn_send_code', '发送验证码')); ?>';
                });
            });
        }
    });
</script>
</body>
</html> 