<?php
require_once '../includes/init.php';
require_once '../includes/auth.php';
if (!isset($_SESSION['user_id'])) {
    header('Location: ../login.php');
    exit;
}
$user_id = $_SESSION['user_id'];
// 校验当前用户是否为黄金/钻石合伙人
$stmt = $pdo->prepare("SELECT role_id, referral_prefix FROM users WHERE id=?");
$stmt->execute([$user_id]);
$me = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$me || !in_array($me['role_id'], [9,10,11])) {
    die(__t('tl_no_permission', '无权限访问'));
}
$prefix = $me['referral_prefix'];

// 获取用户基本信息
$stmt = $pdo->prepare('SELECT id, username, nickname, role_id, referrer_id FROM users WHERE id=?');
$stmt->execute([$user_id]);
$user_info = $stmt->fetch(PDO::FETCH_ASSOC);

// 获取角色名称
$stmt = $pdo->prepare('SELECT name FROM roles WHERE id=?');
$stmt->execute([$me['role_id']]);
$role_info = $stmt->fetch(PDO::FETCH_ASSOC);
$role_name = $role_info ? translate_role_label($role_info['name']) : __t('tl_unknown_role', '未知角色');

// 检查用户充值金额是否达到返佣资格条件
$min_deposit_for_commission = 100; // 默认100 USDT
$stmt = $pdo->prepare("SELECT value FROM system_settings WHERE key_name = 'min_deposit_for_commission'");
$stmt->execute();
$setting = $stmt->fetch(PDO::FETCH_ASSOC);
if ($setting && !empty($setting['value'])) {
    $min_deposit_for_commission = floatval($setting['value']);
}

$stmt = $pdo->prepare("SELECT SUM(amount) FROM recharge_orders WHERE user_id=? AND status='confirmed'");
$stmt->execute([$user_id]);
$total_deposit = floatval($stmt->fetchColumn() ?: 0);

$is_qualified = $total_deposit >= $min_deposit_for_commission;
// 获取所有团队长角色（13~38）+ 通用团队长0(39)
$role_map = [];
$role_code_map = [];
$stmt = $pdo->query("SELECT id, name FROM roles WHERE (id BETWEEN 13 AND 38 OR id=39) ORDER BY id ASC");
$roles = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($roles as $r) {
    $role_map[$r['id']] = $r['name'];
    if (intval($r['id']) === 39) {
        $role_code_map[$r['id']] = '0';
    } else {
        $role_code_map[$r['id']] = chr(65 + ($r['id'] - 13)); // 13->A, 14->B, ...
    }
}
// 获取所有下级用户ID（递归）
function getAllSubIds($all_users, $parent_id) {
    $subs = [];
    foreach ($all_users as $u) {
        if ($u['referrer_id'] == $parent_id) {
            $subs[] = $u['id'];
            $subs = array_merge($subs, getAllSubIds($all_users, $u['id']));
        }
    }
    return $subs;
}
$all_users = $pdo->query('SELECT id, username, nickname, referrer_id, role_id FROM users')->fetchAll(PDO::FETCH_ASSOC);
$all_sub_ids = getAllSubIds($all_users, $user_id);
// 统一总预算（团队长专属+层级合计）默认40%，可被系统设置覆盖
$total_budget = 40;
if (function_exists('get_system_setting')) {
    $tb = floatval(get_system_setting('commission_total_budget'));
    if ($tb > 0) $total_budget = $tb;
}
// 处理团队长设置/编辑表单（支持可选“显示名称”）
if ($_SERVER['REQUEST_METHOD']==='POST' && isset($_POST['set_team_leader'])) {
    $target_user_id = intval($_POST['target_user_id']);
    $role_id = intval($_POST['role_id']);
    $team_leader_commission = floatval($_POST['team_leader_commission']);
    $commission_levels = intval($_POST['commission_levels'] ?? 7);
    $ref_suffix = strtoupper(trim($_POST['ref_code_suffix'] ?? ''));
    $display_name = trim($_POST['display_name'] ?? '');
    // 查找目标用户
    $stmt = $pdo->prepare("SELECT id FROM users WHERE id=?");
    $stmt->execute([$target_user_id]);
    $target = $stmt->fetch(PDO::FETCH_ASSOC);
    if (!$target || !in_array($target['id'], $all_sub_ids)) {
        $msg = __t('tl_msg_user_not_in_team', '该用户不存在或不属于您名下');
    } else {
        // 校验角色ID唯一
        $stmt = $pdo->prepare("SELECT COUNT(*) FROM users WHERE partner_id=? AND role_id=? AND id!=?");
        $stmt->bindValue(1, $user_id, PDO::PARAM_INT);
        $stmt->bindValue(2, $role_id, PDO::PARAM_INT);
        $stmt->bindValue(3, $target['id'], PDO::PARAM_INT);
        $stmt->execute();
        $occupied = 0;
        if ($role_id != 39) {
            $occupied = intval($stmt->fetchColumn());
        }
        if ($role_id != 39 && $occupied > 0) {
            $msg = __t('tl_msg_role_occupied', '该团队长角色已被占用');
        } else {
            // 统一“总预算”口径：团队长专属 + 层级合计 ≤ 总预算（默认40%）
            $total_budget = 40;
            if (function_exists('get_system_setting')) {
                $tb = floatval(get_system_setting('commission_total_budget'));
                if ($tb > 0) $total_budget = $tb;
            }
            if ($team_leader_commission < 0 || $team_leader_commission > $total_budget) {
                $tpl = __t('tl_msg_rate_range', '返佣比例必须在 0~{budget}% 之间');
                $msg = str_replace('{budget}', $total_budget, $tpl);
            } else {
                // 读取该团队长当前已保存的层级比例并做合并校验
                $stmtTmp = $pdo->prepare('SELECT commission_levels, level_rates_json FROM partner_team_leader_commission WHERE partner_id=? AND team_leader_id=? LIMIT 1');
                $stmtTmp->bindValue(1, $user_id, PDO::PARAM_INT);
                $stmtTmp->bindValue(2, $target['id'], PDO::PARAM_INT);
                $stmtTmp->execute();
                $rowRates = $stmtTmp->fetch(PDO::FETCH_ASSOC);
                $lvl = intval($rowRates['commission_levels'] ?? 7);
                $arr = json_decode($rowRates['level_rates_json'] ?? '[]', true);
                if (!is_array($arr)) { $arr = []; }
                for ($i=count($arr); $i<7; $i++) { $arr[$i] = 0; }
                $sumLevels = array_sum(array_slice(array_map('floatval',$arr), 0, max(1,$lvl)));
                if ($team_leader_commission + $sumLevels > $total_budget + 1e-8) {
                    $tpl = __t('tl_msg_budget_exceed', '保存失败：团队长专属返佣与层级合计之和不得超过总预算 {budget}%');
                    $msg = str_replace('{budget}', $total_budget, $tpl);
                } else {
                    // 推广码后缀校验（可为空）
                    if($ref_suffix!==''){
                        if(strlen($ref_suffix)!=4 || !preg_match('/^[A-Z0-9]{4}$/',$ref_suffix)){
                            $msg = __t('tl_msg_ref_suffix_invalid', '推广码后4位需由 4 位大写字母或数字组成');
                        } else {
                            if($commission_levels<1||$commission_levels>7){ 
                                $msg = __t('tl_msg_levels_range', '层级数必须1~7'); 
                            } else {
                                $team_leader_code = $role_code_map[$role_id] ?? '';
                                $stmt = $pdo->prepare("UPDATE users SET role_id=?, team_leader_code=?, team_leader_commission=?, partner_id=? WHERE id=?");
                                $stmt->bindValue(1, $role_id, PDO::PARAM_INT);
                                $stmt->bindValue(2, $team_leader_code, PDO::PARAM_STR);
                                $stmt->bindValue(3, $team_leader_commission, PDO::PARAM_STR);
                                $stmt->bindValue(4, $user_id, PDO::PARAM_INT);
                                $stmt->bindValue(5, $target['id'], PDO::PARAM_INT);
                                $stmt->execute();
                                // 处理推广码自定义
                                $new_code = strtoupper($prefix.$ref_suffix);  // 2 + 4 =6
                                // 唯一性检查
                                $stmt=$pdo->prepare("SELECT COUNT(*) FROM users WHERE referral_code=? AND id!=?");
                                $stmt->bindValue(1, $new_code, PDO::PARAM_STR);
                                $stmt->bindValue(2, $target['id'], PDO::PARAM_INT);
                                $stmt->execute();
                                if($stmt->fetchColumn()>0){
                                    $msg = __t('tl_msg_ref_code_exists', '推广码已存在，请重新输入');
                                } else {
                                    $stmtRef = $pdo->prepare("UPDATE users SET referral_code=? WHERE id=?");
                                    $stmtRef->bindValue(1, $new_code, PDO::PARAM_STR);
                                    $stmtRef->bindValue(2, $target['id'], PDO::PARAM_INT);
                                    $stmtRef->execute();
                                    // 写入/更新展示名称（不覆盖已配置比例等字段）
                                    if ($display_name !== '') {
                                        try {
                                            $stmtIns = $pdo->prepare("INSERT INTO partner_team_leader_commission (partner_id, team_leader_id, display_name) VALUES (?,?,?) ON DUPLICATE KEY UPDATE display_name=VALUES(display_name)");
                                            $stmtIns->bindValue(1, $user_id, PDO::PARAM_INT);
                                            $stmtIns->bindValue(2, $target['id'], PDO::PARAM_INT);
                                            $stmtIns->bindValue(3, $display_name, PDO::PARAM_STR);
                                            $stmtIns->execute();
                                        } catch (Throwable $e) { /* 忽略 */ }
                                    }
                                    $msg = __t('tl_msg_set_success', '设置成功');
                                }
                            }
                        }
                    } else {
                        if($commission_levels<1||$commission_levels>7){ 
                            $msg = __t('tl_msg_levels_range', '层级数必须1~7'); 
                        } else {
                            $team_leader_code = $role_code_map[$role_id] ?? '';
                            $stmt = $pdo->prepare("UPDATE users SET role_id=?, team_leader_code=?, team_leader_commission=?, partner_id=? WHERE id=?");
                            $stmt->bindValue(1, $role_id, PDO::PARAM_INT);
                            $stmt->bindValue(2, $team_leader_code, PDO::PARAM_STR);
                            $stmt->bindValue(3, $team_leader_commission, PDO::PARAM_STR);
                            $stmt->bindValue(4, $user_id, PDO::PARAM_INT);
                            $stmt->bindValue(5, $target['id'], PDO::PARAM_INT);
                            $stmt->execute();
                            // 写入/更新展示名称（不覆盖已配置比例等字段）
                            if ($display_name !== '') {
                                try {
                                    $stmtIns = $pdo->prepare("INSERT INTO partner_team_leader_commission (partner_id, team_leader_id, display_name) VALUES (?,?,?) ON DUPLICATE KEY UPDATE display_name=VALUES(display_name)");
                                    $stmtIns->bindValue(1, $user_id, PDO::PARAM_INT);
                                    $stmtIns->bindValue(2, $target['id'], PDO::PARAM_INT);
                                    $stmtIns->bindValue(3, $display_name, PDO::PARAM_STR);
                                    $stmtIns->execute();
                                } catch (Throwable $e) { /* 忽略 */ }
                            }
                            $msg = __t('tl_msg_set_success', '设置成功');
                        }
                    }
                }
            }
        }
    }
}

// 撤销团队长（恢复为普通用户、清除专属配置）
if ($_SERVER['REQUEST_METHOD']==='POST' && isset($_POST['revoke_team_leader'])) {
    $target_user_id = intval($_POST['revoke_user_id'] ?? 0);
    if ($target_user_id <= 0) {
        $msg = __t('tl_revoke_param_error', '撤销失败：参数错误');
    } else {
        // 验证目标属于当前合伙人链条
        if (!in_array($target_user_id, $all_sub_ids)) {
            $msg = __t('tl_revoke_not_in_team', '撤销失败：该用户不属于您名下');
        } else {
            // 仅允许撤销团队长角色（13~38 或 39）
            $stmtChk = $pdo->prepare('SELECT role_id FROM users WHERE id=?');
            $stmtChk->bindValue(1, $target_user_id, PDO::PARAM_INT);
            $stmtChk->execute();
            $rid = intval($stmtChk->fetchColumn());
            if (!(($rid >= 13 && $rid <= 38) || $rid == 39)) {
                $msg = __t('tl_revoke_not_leader', '撤销失败：该用户当前不是团队长身份');
            } else {
                try {
                    $pdo->beginTransaction();
                    // 清除团队长专属比例配置
                    $stmtDel = $pdo->prepare('DELETE FROM partner_team_leader_commission WHERE partner_id=? AND team_leader_id=?');
                    $stmtDel->bindValue(1, $user_id, PDO::PARAM_INT);
                    $stmtDel->bindValue(2, $target_user_id, PDO::PARAM_INT);
                    $stmtDel->execute();
                    // 选择一个有效的“普通用户”角色ID，避免外键约束错误（排除团队长区间及 39）
                    $defaultRoleId = null;
                    try {
                        // 优先按常见名称匹配
                        $stmtR = $pdo->query("SELECT id,name FROM roles WHERE name IN ('user','普通用户','member','会员','普通会员') ORDER BY id ASC LIMIT 1");
                        $rowR = $stmtR ? $stmtR->fetch(PDO::FETCH_ASSOC) : null;
                        if ($rowR && !empty($rowR['id'])) {
                            $defaultRoleId = intval($rowR['id']);
                        } else {
                            // 次选：找一个不在团队长区间(13~38)且不等于39的最小角色ID
                            $stmtR = $pdo->query("SELECT id FROM roles WHERE (id < 13 OR id > 38) AND id != 39 ORDER BY id ASC LIMIT 1");
                            $defaultRoleId = intval($stmtR->fetchColumn() ?: 0);
                            if ($defaultRoleId <= 0) {
                                // 兜底：任意最小ID，确保一定存在
                                $stmtR = $pdo->query("SELECT id FROM roles ORDER BY id ASC LIMIT 1");
                                $defaultRoleId = intval($stmtR->fetchColumn() ?: 0);
                            }
                        }
                    } catch (Throwable $e) { $defaultRoleId = 0; }
                    if ($defaultRoleId <= 0) { throw new Exception('未找到可用的普通角色，请先在角色表中创建一个普通角色'); }
                    // 恢复用户为普通角色：清空团队长前缀与专属返佣
                    $stmtUp = $pdo->prepare('UPDATE users SET role_id=?, team_leader_code=NULL, team_leader_commission=0 WHERE id=?');
                    $stmtUp->bindValue(1, $defaultRoleId, PDO::PARAM_INT);
                    $stmtUp->bindValue(2, $target_user_id, PDO::PARAM_INT);
                    $stmtUp->execute();
                    $pdo->commit();
                    $msg = __t('tl_revoke_success', '已撤销团队长身份并恢复标准层级');
                } catch (Throwable $e) {
                    if ($pdo->inTransaction()) $pdo->rollBack();
                    $msg = __t('tl_revoke_fail_prefix', '撤销失败：') . $e->getMessage();
                }
            }
        }
    }
}

// 保存团队长各等级比例（独立表单，仅后端）
// 保存团队长各等级比例与展示名称
if ($_SERVER['REQUEST_METHOD']==='POST' && isset($_POST['save_tl_rates'])) {
    $tl_id = intval($_POST['rates_team_leader_id'] ?? 0);
    $commission_levels = intval($_POST['rates_commission_levels'] ?? 7);
    if ($commission_levels < 1 || $commission_levels > 7) $commission_levels = 7;
    $tl_bonus_rate = floatval($_POST['rates_tl_bonus_rate'] ?? 0);
    $rates_display_name = trim($_POST['rates_display_name'] ?? '');
    $rates_allow_partner_site = isset($_POST['rates_allow_partner_site']) ? 1 : 0;
    
    // 独立站 TOP/直推/间推 extra 已下线：保存时强制清空，不再接受表单覆盖。
    $tl_partner_site_top_rate = null;
    $tl_partner_site_direct_rate = null;
    $tl_partner_site_indirect_rate = null;
    $tl_partner_site_extra_req = null;
    $tl_partner_site_active = null;
    
    // 读取“总预算”（团队长专属+层级合计），默认40%，覆盖原 normal_budget 36
    $total_budget = 40;
    if (function_exists('get_system_setting')) {
        $tb = floatval(get_system_setting('commission_total_budget'));
        if ($tb > 0) $total_budget = $tb;
    }
    // 收集7层比例，并对超出层级的部分强制置0
    $rates = [];
    for ($i=1; $i<=7; $i++) {
        $v = isset($_POST['rate'.$i]) ? floatval($_POST['rate'.$i]) : 0.0;
        $rates[] = ($i <= $commission_levels) ? max(0.0, $v) : 0.0;
    }
    // 仅按有效层级计算合计
    $sum = array_sum(array_slice($rates, 0, $commission_levels));
    if ($tl_id <= 0) {
        $msg = __t('tl_rates_msg_select_leader', '保存失败：请选择团队长');
    } elseif ($tl_bonus_rate < 0 || $tl_bonus_rate > $total_budget) {
        $tpl = __t('tl_rates_msg_bonus_range', '保存失败：团队长专属返佣必须在 0~{budget}% 范围内');
        $msg = str_replace('{budget}', $total_budget, $tpl);
    } elseif ($tl_bonus_rate + $sum > $total_budget + 1e-8) {
        $tpl = __t('tl_rates_msg_bonus_budget', '保存失败：团队长专属返佣 + 层级合计 不得超过总预算 {budget}%');
        $msg = str_replace('{budget}', $total_budget, $tpl);
    } else {
        // 验证所选团队长属于当前合伙人名下，且为团队长角色范围
        if (!in_array($tl_id, $all_sub_ids)) {
            $msg = __t('tl_rates_msg_leader_not_in_team', '保存失败：该团队长不属于您名下');
        } else {
            $stmtChk = $pdo->prepare('SELECT role_id FROM users WHERE id=?');
            $stmtChk->bindValue(1, $tl_id, PDO::PARAM_INT);
            $stmtChk->execute();
            $rid = intval($stmtChk->fetchColumn());
            if (!(($rid >= 13 && $rid <= 38) || $rid == 39)) {
                $msg = __t('tl_rates_msg_not_leader_role', '保存失败：目标用户不是团队长角色');
            } else {
                // 验证独立站比例合计（如果设置了自定义配置）
                $tl_validation_passed = true;
                if ($tl_partner_site_top_rate !== null || $tl_partner_site_direct_rate !== null || $tl_partner_site_indirect_rate !== null) {
                    // 获取额外层总额（优先使用团队长设置，否则使用Top合伙人全局设置，最后默认2.0）
                    $stmtGetPartnerPolicy = $pdo->prepare("SELECT extra_total_rate FROM partner_site_policy WHERE top_partner_id=? AND active=1 LIMIT 1");
                    $stmtGetPartnerPolicy->bindValue(1, $user_id, PDO::PARAM_INT);
                    $stmtGetPartnerPolicy->execute();
                    $partner_extra_total = $stmtGetPartnerPolicy->fetchColumn();
                    // 校验上限使用管理员配置（或全局默认2.0），不允许团队长自定义该上限
                    $tl_extra_total = floatval($partner_extra_total ?: 2.0);
                    
                    $tl_top = $tl_partner_site_top_rate ?? 0;
                    $tl_direct = $tl_partner_site_direct_rate ?? 0;
                    $tl_indirect = $tl_partner_site_indirect_rate ?? 0;
                    $tl_sum = $tl_top + $tl_direct + $tl_indirect;
                    if ($tl_sum > $tl_extra_total + 1e-6) {
                        $msg = __t('tl_rates_msg_site_sum_exceed', '保存失败：团队长独立站配置中，TOP/直推/间推占比之和不能超过额外层总额%');
                        $tl_validation_passed = false;
                    }
                }
                
                if ($tl_validation_passed) {
                    $json = json_encode($rates, JSON_UNESCAPED_UNICODE);
                    // 使用一对一赋值，避免数组方式导致的字段顺序问题
                    $stmt = $pdo->prepare("REPLACE INTO partner_team_leader_commission (partner_id, team_leader_id, commission_rate, commission_levels, level_rates_json, tl_bonus_rate, display_name, allow_partner_site, partner_site_extra_total_rate, partner_site_top_partner_rate, partner_site_direct_rate, partner_site_indirect_rate, partner_site_extra_requirement, partner_site_active) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
                    $stmt->bindValue(1, $user_id, PDO::PARAM_INT);
                    $stmt->bindValue(2, $tl_id, PDO::PARAM_INT);
                    $stmt->bindValue(3, $tl_bonus_rate, PDO::PARAM_STR);
                    $stmt->bindValue(4, $commission_levels, PDO::PARAM_INT);
                    $stmt->bindValue(5, $json, PDO::PARAM_STR);
                    $stmt->bindValue(6, $tl_bonus_rate, PDO::PARAM_STR);
                    $stmt->bindValue(7, $rates_display_name, PDO::PARAM_STR);
                    $stmt->bindValue(8, $rates_allow_partner_site, PDO::PARAM_INT);
                    // 额外层总额不允许由此处设置，始终存NULL以表示使用管理员配置
                    $stmt->bindValue(9, null, PDO::PARAM_NULL);
                    $stmt->bindValue(10, $tl_partner_site_top_rate, $tl_partner_site_top_rate === null ? PDO::PARAM_NULL : PDO::PARAM_STR);
                    $stmt->bindValue(11, $tl_partner_site_direct_rate, $tl_partner_site_direct_rate === null ? PDO::PARAM_NULL : PDO::PARAM_STR);
                    $stmt->bindValue(12, $tl_partner_site_indirect_rate, $tl_partner_site_indirect_rate === null ? PDO::PARAM_NULL : PDO::PARAM_STR);
                    $stmt->bindValue(13, $tl_partner_site_extra_req, $tl_partner_site_extra_req === null ? PDO::PARAM_NULL : PDO::PARAM_INT);
                    $stmt->bindValue(14, $tl_partner_site_active, $tl_partner_site_active === null ? PDO::PARAM_NULL : PDO::PARAM_INT);
                    $stmt->execute();
                    $msg = __t('tl_rates_msg_save_success', '保存成功');
                }
            }
        }
    }
}

// 查询已设置的团队长：在当前合伙人全部下级中找 role_id 13~38 或 39
$team_leaders = [];
if (!empty($all_sub_ids)) {
    $placeholders = implode(',', array_fill(0, count($all_sub_ids), '?'));
    $sql = "SELECT u.id, u.username, u.nickname, u.role_id, u.team_leader_code, u.team_leader_commission, u.referral_code,
            ptc.commission_levels, ptc.level_rates_json, ptc.tl_bonus_rate, ptc.display_name,
            COALESCE(ptc.allow_partner_site, 1) as allow_partner_site,
            ptc.partner_site_top_partner_rate, ptc.partner_site_direct_rate, ptc.partner_site_indirect_rate,
            ptc.partner_site_extra_requirement, ptc.partner_site_active
            FROM users u
            LEFT JOIN partner_team_leader_commission ptc ON ptc.team_leader_id = u.id AND ptc.partner_id = ?
            WHERE u.id IN ($placeholders) AND (u.role_id BETWEEN 13 AND 38 OR u.role_id=39)";
    $stmt = $pdo->prepare($sql);
    $params=array_merge([$user_id],$all_sub_ids);
    $stmt->execute($params);
    $team_leaders = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
// 统计每个团队长下属用户数和业绩
$stats = [];
foreach ($team_leaders as $tl) {
    // 统计团队人数
    $sub_ids = getAllSubIds($all_users, $tl['id']);
    $team_count = count($sub_ids);
    // 统计业绩
    if ($team_count > 0) {
        $in = implode(',', array_map('intval', $sub_ids));
        $stmt = $pdo->prepare("SELECT SUM(amount) FROM recharge_orders WHERE user_id IN ($in) AND status='confirmed'");
        $stmt->execute();
        $team_performance = $stmt->fetchColumn() ?: 0;
    } else {
        $team_performance = 0;
    }
    $stats[$tl['id']] = ['team_count'=>$team_count, 'team_performance'=>$team_performance];
    $stats[$tl['id']]['levels'] = intval($tl['commission_levels'] ?? 7);
    $stats[$tl['id']]['tl_bonus_rate'] = floatval($tl['tl_bonus_rate'] ?? $tl['team_leader_commission'] ?? 0);
    $rates_from_db = json_decode($tl['level_rates_json'] ?? '[]', true);
    if (!is_array($rates_from_db) || empty($rates_from_db)) {
        // 兜底：若未配置层级比例，则按未分配处理（全为0）
        $stats[$tl['id']]['rates'] = [0,0,0,0,0,0,0];
    } else {
        // 确保数组长度为7，不足补0，并转换为浮点数
        for ($i=count($rates_from_db); $i<7; $i++) { $rates_from_db[$i] = 0; }
        $stats[$tl['id']]['rates'] = array_map('floatval', $rates_from_db);
    }
}
ob_start();
?>
<?php
// 表单回显：若提交失败，保留上次输入
$pref_target_user_id = isset($_POST['target_user_id']) ? trim($_POST['target_user_id']) : '';
$pref_role_id = isset($_POST['role_id']) ? trim($_POST['role_id']) : '';
$pref_team_leader_commission = isset($_POST['team_leader_commission']) ? trim($_POST['team_leader_commission']) : '';
$pref_commission_levels = isset($_POST['commission_levels']) ? trim($_POST['commission_levels']) : '';
$pref_ref_code_suffix = isset($_POST['ref_code_suffix']) ? trim($_POST['ref_code_suffix']) : '';
$pref_display_name_set = isset($_POST['display_name']) ? trim($_POST['display_name']) : '';

$pref_tl_code = '';
if ($pref_role_id !== '') {
    $rid_tmp = intval($pref_role_id);
    if ($rid_tmp === 39) { $pref_tl_code = '0'; }
    elseif ($rid_tmp >= 13 && $rid_tmp <= 38) { $pref_tl_code = chr(65 + ($rid_tmp - 13)); }
}

$pref_rates_tl_id = isset($_POST['rates_team_leader_id']) ? trim($_POST['rates_team_leader_id']) : '';
$pref_rates_levels = isset($_POST['rates_commission_levels']) ? intval($_POST['rates_commission_levels']) : 0;
$pref_rates_tlb = isset($_POST['rates_tl_bonus_rate']) ? trim($_POST['rates_tl_bonus_rate']) : '';
$pref_rates_display_name = isset($_POST['rates_display_name']) ? trim($_POST['rates_display_name']) : '';
$pref_rates_allow_partner_site = isset($_POST['rates_allow_partner_site']) ? 1 : 0;
$pref_rates_arr = [];
for ($i=1; $i<=7; $i++) {
    $k = 'rate'.$i;
    $pref_rates_arr[$i] = isset($_POST[$k]) ? trim($_POST[$k]) : '';
}
// 独立站配置回显
// 额外层总额仅展示，不从POST读取
$pref_tl_partner_site_top_rate = isset($_POST['tl_partner_site_top_rate']) ? trim($_POST['tl_partner_site_top_rate']) : '';
$pref_tl_partner_site_direct_rate = isset($_POST['tl_partner_site_direct_rate']) ? trim($_POST['tl_partner_site_direct_rate']) : '';
$pref_tl_partner_site_indirect_rate = isset($_POST['tl_partner_site_indirect_rate']) ? trim($_POST['tl_partner_site_indirect_rate']) : '';
$pref_tl_partner_site_extra_req = isset($_POST['tl_partner_site_extra_req']) ? trim($_POST['tl_partner_site_extra_req']) : '';
$pref_tl_partner_site_active = isset($_POST['tl_partner_site_active']) && $_POST['tl_partner_site_active'] !== '' ? trim($_POST['tl_partner_site_active']) : '';
?>
        <!-- 用户基本信息卡片 -->
        <div class="card mb-4" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none;">
            <div class="card-body">
                <div class="row align-items-center">
                    <div class="col-md-8">
                        <h5 class="mb-2"><i class="fas fa-user-circle me-2"></i><?= __t('tl_user_info_title', '用户信息'); ?></h5>
                        <p class="mb-1">
                            <strong><?= __t('tl_user_id_label', '用户ID'); ?>:</strong> <?php echo htmlspecialchars($user_info['id']); ?> |
                            <strong><?= __t('tl_username_label', '用户名'); ?>:</strong> <?php echo htmlspecialchars($user_info['username']); ?> |
                            <strong><?= __t('tl_nickname_label', '昵称'); ?>:</strong> <?php echo htmlspecialchars($user_info['nickname'] ?: ''); ?>
                        </p>
                        <p class="mb-1">
                            <strong><?= __t('tl_role_label', '身份'); ?>:</strong> <?php echo htmlspecialchars($role_name); ?> |
                            <strong><?= __t('tl_total_deposit_label', '总充值'); ?>:</strong> <?php echo number_format($total_deposit, 2); ?> USDT
                        </p>
                    </div>
                    <div class="col-md-4 text-end">
                        <?php if (!$is_qualified): ?>
                            <div class="alert alert-warning mb-0" style="background: #ff6b35; border: none; color: white;">
                                <strong><i class="fas fa-exclamation-triangle me-1"></i>
                                    <?php
                                    $tpl = __t('tl_not_qualified_tip', '您还没有激活您的管理员号，充值满 {amount} USDT 即可激活所有管理员功能。');
                                    echo str_replace('{amount}', number_format($min_deposit_for_commission, 2), $tpl);
                                    ?>
                                </strong>
                            </div>
                        <?php else: ?>
                            <div class="alert alert-success mb-0" style="background: #28a745; border: none; color: white;">
                                <strong><i class="fas fa-check-circle me-1"></i><?= __t('tl_qualified_tip', '管理员功能已激活'); ?></strong>
                            </div>
                        <?php endif; ?>
                    </div>
                </div>
            </div>
        </div>

        <div class="card neon-card p-4 mb-4">
            <h4 class="mb-3"><?= __t('tl_main_card_title', '--设置团队长-每个团队长的层级不可超过合伙人层级，多余未分配的将自动分配给合伙人'); ?> <a href="/user/index.php" class="btn btn-outline-secondary btn-sm ml-2"><i class="fas fa-home me-1"></i> <?= __t('common_back_home', '返回会员首页'); ?></a></h4>
            <?php if (!empty($msg)) echo '<div class="alert alert-info">'.htmlspecialchars($msg).'</div>'; ?>
            <form method="post" class="row g-3" id="tlRatesForm">
                <input type="hidden" name="set_team_leader" value="1">
                <div class="col-md-4">
                    <input type="number" name="target_user_id" class="form-control" placeholder="<?= __t('tl_input_user_id_placeholder', '输入用户ID（仅限您链条下用户）'); ?>" value="<?php echo htmlspecialchars($pref_target_user_id); ?>" required>
                </div>
                <div class="col-md-3">
                    <select name="role_id" class="form-control" required onchange="updateTeamLeaderCode()">
                        <option value=""><?= __t('tl_select_role_placeholder', '选择团队长角色'); ?></option>
                        <?php foreach($role_map as $rid=>$rname):
                            $used=false;
                            if ($rid != 39) {
                                foreach($team_leaders as $tl) if($tl['role_id']==$rid) $used=true;
                            }
                        ?>
                        <option value="<?php echo $rid; ?>" <?php echo $used?'disabled':'';?> <?php echo ($pref_role_id!=='' && intval($pref_role_id)==$rid)?'selected':'';?>>
                            <?php echo translate_role_label($rname); ?>（<?php echo $role_code_map[$rid]; ?>)
                            <?php if ($used && $rid != 39): ?>
                                <?php echo __t('tl_role_used_suffix', '(已用)'); ?>
                            <?php elseif ($rid == 39): ?>
                                <?php echo __t('tl_role_reusable_suffix', '(可重复选)'); ?>
                            <?php endif; ?>
                        </option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div class="col-md-2">
                    <input type="text" name="team_leader_code" id="team_leader_code" class="form-control" maxlength="1" placeholder="<?= __t('tl_prefix_placeholder', '前缀字母'); ?>" readonly required style="text-transform:uppercase;" value="<?php echo htmlspecialchars($pref_tl_code); ?>">
                </div>
                <div class="col-md-2">
                    <?php $commTpl = __t('tl_commission_placeholder', '返佣% (≤{budget})'); ?>
                    <input type="number" name="team_leader_commission" class="form-control" min="0" max="<?php echo htmlspecialchars($total_budget); ?>" step="0.01" placeholder="<?php echo htmlspecialchars(str_replace('{budget}', $total_budget, $commTpl)); ?>" value="<?php echo htmlspecialchars($pref_team_leader_commission); ?>" required>
                </div>
                <div class="col-md-2">
                    <?php
                        // 读取合伙人默认层级数
                        $stmt_lvl = $pdo->prepare("SELECT commission_levels FROM partners WHERE user_id=? LIMIT 1");
                        $stmt_lvl->execute([$user_id]);
                        $partner_lvl = intval($stmt_lvl->fetchColumn() ?: 7);
                    ?>
                    <select name="commission_levels" class="form-control" required>
                        <?php for($l=1;$l<=7;$l++): ?>
                            <?php
                            $sel_level = ($pref_commission_levels!=='') ? intval($pref_commission_levels) : $partner_lvl;
                            $optTpl = __t('tl_commission_levels_option', '{level} 层');
                            $optText = str_replace('{level}', $l, $optTpl);
                            ?>
                            <option value="<?php echo $l;?>" <?php echo ($l==$sel_level)?'selected':'';?>><?php echo htmlspecialchars($optText); ?></option>
                        <?php endfor; ?>
                    </select>
                </div>
                <div class="col-md-2">
                    <input type="text" name="ref_code_suffix" id="ref_code_suffix" class="form-control" maxlength="4" placeholder="<?= __t('tl_ref_suffix_placeholder', '推广码后4位(留空则不修改)'); ?>" value="<?php echo htmlspecialchars($pref_ref_code_suffix); ?>">
                </div>
                <div class="col-md-3">
                    <input type="text" name="display_name" class="form-control" maxlength="100" placeholder="<?= __t('tl_display_name_placeholder', '显示名称（如：杭州西湖区运营中心，可选）'); ?>" value="<?php echo htmlspecialchars($pref_display_name_set); ?>">
                </div>
                <div class="col-md-1">
                    <button type="submit" class="btn btn-primary" <?php echo !$is_qualified ? 'disabled' : ''; ?>>
                        <?php echo $is_qualified ? __t('tl_btn_set', '设置') : __t('tl_btn_set_need_activate', '设置（需激活）'); ?>
                    </button>
                </div>
            </form>
        </div>
         <div class="card neon-card p-4 mt-4">
             <h4 class="mb-3"><?= __t('tl_rates_card_title', '－团队长各等级比例配置，填０则此级不分配归总号'); ?></h4>
            <form method="post" class="row g-3">
                <input type="hidden" name="save_tl_rates" value="1">
                <div class="col-md-4">
                    <label class="form-label"><?= __t('tl_rates_select_leader', '选择团队长'); ?></label>
                    <select name="rates_team_leader_id" id="rates_team_leader_id" class="form-control" required>
                        <option value=""><?= __t('tl_rates_select_placeholder', '请选择'); ?></option>
                        <?php
                        // 仅埋 data-*，不引入脚本；先提供层级与专属返佣两个关键数据
                        $cfgRows = [];
                        $stmt = $pdo->prepare("SELECT team_leader_id, commission_levels, tl_bonus_rate, allow_partner_site FROM partner_team_leader_commission WHERE partner_id=?");
                        $stmt->bindValue(1, $user_id, PDO::PARAM_INT);
                        $stmt->execute();
                        foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $r) { $cfgRows[$r['team_leader_id']] = $r; }
                        foreach ($team_leaders as $tl) {
                            $cfg = $cfgRows[$tl['id']] ?? null;
                            $levels = intval($cfg['commission_levels'] ?? 7);
                            $tlb = isset($cfg['tl_bonus_rate']) ? floatval($cfg['tl_bonus_rate']) : floatval($tl['team_leader_commission'] ?? 0);
                            $allowPartnerSite = isset($cfg['allow_partner_site']) ? intval($cfg['allow_partner_site']) : (intval($tl['allow_partner_site'] ?? 1));
                            $sel_attr = ($pref_rates_tl_id!=='' && intval($pref_rates_tl_id)==$tl['id']) ? ' selected' : '';
                            echo '<option value="'.$tl['id'].'" data-levels="'.htmlspecialchars($levels).'" data-tlb="'.htmlspecialchars($tlb).'" data-allow-partner-site="'.htmlspecialchars($allowPartnerSite).'"'.$sel_attr.'>'.htmlspecialchars($tl['nickname'] ?: $tl['username']).' (#'.$tl['id'].')</option>';
                        }
                        ?>
                    </select>
                </div>
                <div class="col-md-2">
                    <label class="form-label"><?= __t('tl_rates_levels_label', '层级数(1-7)'); ?></label>
                    <select name="rates_commission_levels" id="rates_commission_levels" class="form-control" required>
                        <?php for($l=1;$l<=7;$l++): ?>
                            <?php
                            $optTpl = __t('tl_commission_levels_option', '{level} 层');
                            $optText = str_replace('{level}', $l, $optTpl);
                            ?>
                            <option value="<?php echo $l; ?>" <?php echo ($pref_rates_levels>0 && $pref_rates_levels==$l)?'selected':''; ?>><?php echo htmlspecialchars($optText); ?></option>
                        <?php endfor; ?>
                    </select>
                    <small class="text-muted"><?= __t('tl_rates_levels_hint', '选择团队长后，这里会显示其已保存的层级数'); ?></small>
                </div>
                <div class="col-md-2">
                    <label class="form-label" style="color: red;"><?= __t('tl_rates_tl_bonus_label', '团队长专属返佣(%)无限极'); ?></label>
                    <?php $tlBonusTpl = __t('tl_rates_tl_bonus_placeholder', '此项+以下之和 ≤{budget}'); ?>
                    <input type="number" name="rates_tl_bonus_rate" id="rates_tl_bonus_rate" class="form-control" min="0" max="<?php echo htmlspecialchars($total_budget); ?>" step="0.01" placeholder="<?php echo htmlspecialchars(str_replace('{budget}', number_format($total_budget,2), $tlBonusTpl)); ?>" value="<?php echo htmlspecialchars($pref_rates_tlb); ?>">
                </div>
                <div class="col-md-3">
                    <label class="form-label"><?= __t('tl_rates_display_name_label', '显示名称（可选）'); ?></label>
                    <input type="text" name="rates_display_name" id="rates_display_name" class="form-control" maxlength="100" placeholder="<?= __t('tl_display_name_placeholder', '显示名称（如：杭州西湖区运营中心，可选）'); ?>" value="<?php echo htmlspecialchars($pref_rates_display_name); ?>">
                </div>
                <!-- 允许独立站复选框移动到“团队长独立站配置”区域 -->
                <div class="col-12"></div>
                <?php for($i=1;$i<=7;$i++): ?>
                    <div class="col-md-2">
                        <label class="form-label">
                            <?php
                            $lvlTpl = __t('tl_rates_level_label_prefix', '第{level}层');
                            $lvlText = str_replace('{level}', $i, $lvlTpl);
                            $suffix = '';
                            if ($i==1) $suffix = __t('tl_rates_level_label_direct', '直');
                            elseif ($i==2) $suffix = __t('tl_rates_level_label_indirect', '间');
                            echo htmlspecialchars($lvlText . $suffix . '(%)');
                            ?>
                        </label>
                        <input type="number" name="rate<?php echo $i; ?>" id="rate<?php echo $i; ?>" class="form-control" min="0" max="100" step="0.01" value="<?php echo htmlspecialchars($pref_rates_arr[$i]!==''?$pref_rates_arr[$i]:'0'); ?>">
                    </div>
                <?php endfor; ?>
                <div class="col-12">
                    <small id="tlRateSummary" class="text-muted"><?php
                        $normal_budget_js = 36;
                        if (function_exists('get_system_setting')) {
                            $nb = floatval(get_system_setting('commission_normal_budget'));
                            if ($nb > 0) $normal_budget_js = $nb;
                        }
                        $sumTpl = __t('tl_rates_summary', '共分配 {allocated}% / 最高预算 {budget}%');
                        $initialText = str_replace(
                            ['{allocated}','{budget}'],
                            ['0.00', $normal_budget_js],
                            $sumTpl
                        );
                        echo htmlspecialchars($initialText);
                    ?></small>
                </div>
                <div class="col-12"><hr style="border-color: #ccc; margin: 20px 0;"></div>
                <div class="col-12">
                    <div class="alert alert-secondary mb-3">
                        <strong>独立站 TOP/直推/间推额外层</strong>已下线，不再在此配置。
                        站间改为：直推开店锁 2% + 店级水位线（≥41 最多两层）。此处仅保留「允许独立站」。
                    </div>
                </div>
                <?php
                $current_tl_partner_site_config = null;
                if ($pref_rates_tl_id) {
                    $stmtGetTLConfig = $pdo->prepare("SELECT allow_partner_site FROM partner_team_leader_commission WHERE partner_id=? AND team_leader_id=? LIMIT 1");
                    $stmtGetTLConfig->bindValue(1, $user_id, PDO::PARAM_INT);
                    $stmtGetTLConfig->bindValue(2, intval($pref_rates_tl_id), PDO::PARAM_INT);
                    $stmtGetTLConfig->execute();
                    $current_tl_partner_site_config = $stmtGetTLConfig->fetch(PDO::FETCH_ASSOC);
                }
                ?>
                <div class="col-md-3 d-flex align-items-end">
                    <div class="form-check">
                        <?php
                        $allow_val = isset($_POST['rates_allow_partner_site'])
                            ? 1
                            : (($current_tl_partner_site_config && isset($current_tl_partner_site_config['allow_partner_site']))
                                ? intval($current_tl_partner_site_config['allow_partner_site'])
                                : 1);
                        ?>
                        <input class="form-check-input" type="checkbox" name="rates_allow_partner_site" id="rates_allow_partner_site" value="1"<?php echo $allow_val ? ' checked' : ''; ?>>
                        <label class="form-check-label" for="rates_allow_partner_site" title="<?= __t('tl_rates_allow_site_title', '允许该团队长及其下级用户申请独立站'); ?>"><?= __t('tl_rates_allow_site_label', '允许独立站'); ?></label>
                    </div>
                </div>
                <div class="col-12">
                    <button type="submit" class="btn btn-primary" <?php echo !$is_qualified ? 'disabled' : ''; ?>>
                        <?php echo $is_qualified ? __t('tl_rates_btn_save', '保存比例') : __t('tl_rates_btn_save_need_activate', '保存比例（需激活）'); ?>
                    </button>
                </div>
            </form>
        </div>
        
        <div class="card neon-card p-4">
            <h4 class="mb-3"><?= __t('tl_table_title', '--已设置团队长'); ?></h4>
            <div class="table-responsive">
            <table class="table table-bordered mb-0">
                <thead>
                    <tr>
                        <th><?= __t('tl_table_col_nickname', '昵称'); ?></th>
                        <th><?= __t('tl_table_col_username', '用户名'); ?></th>
                        <th><?= __t('tl_table_col_role_id', '角色ID'); ?></th>
                        <th><?= __t('tl_table_col_prefix', '前缀'); ?></th>
                        <th><?= __t('tl_table_col_ref_code', '推广码'); ?></th>
                        <th><?= __t('tl_table_col_display_name', '显示名称'); ?></th>
                        <th><?= __t('tl_table_col_bonus_rate', '返佣比例'); ?></th>
                        <th><?= __t('tl_table_col_levels', '层级'); ?></th>
                        <th><?= __t('tl_table_col_level_rates', '层级比例'); ?></th>
                        <th><?= __t('tl_table_col_site_config', '独立站配置'); ?></th>
                        <th><?= __t('tl_table_col_team_count', '团队人数'); ?></th>
                        <th><?= __t('tl_table_col_team_perf', '团队业绩'); ?></th>
                        <th><?= __t('tl_table_col_allow_site', '允许独立站'); ?></th>
                        <th><?= __t('tl_table_col_actions', '操作'); ?></th>
                    </tr>
                </thead>
                <tbody>
                <?php foreach($team_leaders as $tl): ?>
                    <tr>
                        <td><?php echo htmlspecialchars($tl['nickname']); ?></td>
                        <td><?php echo htmlspecialchars($tl['username']); ?></td>
                        <td><?php echo htmlspecialchars($tl['role_id']); ?></td>
                        <td><?php echo htmlspecialchars($tl['team_leader_code']); ?></td>
                        <td><?php echo htmlspecialchars($tl['referral_code']); ?></td>
                        <td><?php echo htmlspecialchars($tl['display_name'] ?? ''); ?></td>
                        <td><?php echo htmlspecialchars($tl['tl_bonus_rate'] ?: $tl['team_leader_commission']); ?>%</td>
                        <td><?php $__lvl = (int)($tl['commission_levels']?:$partner_lvl); echo $__lvl; ?></td>
                        <td>
                            <?php
                            // 直接从 $stats 数组中读取数据
                            $current_lvl = intval($stats[$tl['id']]['levels'] ?? 7);
                            $current_rates = is_array($stats[$tl['id']]['rates']) ? $stats[$tl['id']]['rates'] : [10,6,4,4,4,4,4];
                            $show_rates = array_slice($current_rates, 0, $current_lvl);
                            echo htmlspecialchars(implode('/', array_map(function($v){ return rtrim(rtrim(number_format((float)$v, 2, '.', ''), '0'), '.'); }, $show_rates)));
                             ?>
                        </td>
                        <td>
                            <?php
                            $conf_active = isset($tl['partner_site_active']) ? intval($tl['partner_site_active']) : null;
                            $conf_top = $tl['partner_site_top_partner_rate'] ?? null;
                            $conf_dir = $tl['partner_site_direct_rate'] ?? null;
                            $conf_ind = $tl['partner_site_indirect_rate'] ?? null;
                            $conf_req = $tl['partner_site_extra_requirement'] ?? null;
                            if ($conf_active === null && $conf_top === null && $conf_dir === null && $conf_ind === null && $conf_req === null) {
                                echo '<span class="badge badge-secondary">'.__t('tl_table_badge_use_global', '使用全局').'</span>';
                            } else {
                                $parts = [];
                                $parts[] = __t('tl_table_badge_top', 'TOP').' ' . (($conf_top!==null)?rtrim(rtrim(number_format((float)$conf_top,2,'.',''), '0'),'.'):'-') . '%';
                                $parts[] = __t('tl_table_badge_direct', '直推').' ' . (($conf_dir!==null)?rtrim(rtrim(number_format((float)$conf_dir,2,'.',''), '0'),'.'):'-') . '%';
                                $parts[] = __t('tl_table_badge_indirect', '间推').' ' . (($conf_ind!==null)?rtrim(rtrim(number_format((float)$conf_ind,2,'.',''), '0'),'.'):'-') . '%';
                                if ($conf_req!==null) { $parts[] = __t('tl_table_badge_extra', '加价').' '.intval($conf_req); }
                                if ($conf_active!==null) {
                                    $parts[] = $conf_active
                                        ? '<span class="badge badge-success">'.__t('tl_table_badge_active', '启用').'</span>'
                                        : '<span class="badge badge-warning">'.__t('tl_table_badge_inactive', '未启用').'</span>';
                                }
                                echo implode(' / ', $parts);
                            }
                            ?>
                        </td>
                        <td><?php echo htmlspecialchars($stats[$tl['id']]['team_count']); ?></td>
                        <td><?php echo number_format($stats[$tl['id']]['team_performance'],2); ?></td>
                        <td><?php
                            $allowSite = intval($tl['allow_partner_site'] ?? 1);
                            echo $allowSite
                                ? '<span class="badge badge-success">'.__t('tl_table_badge_allow', '允许').'</span>'
                                : '<span class="badge badge-danger">'.__t('tl_table_badge_forbid', '禁止').'</span>';
                        ?></td>
                        <td>
                            <form method="post" style="display:inline-block;" onsubmit="return confirm('<?= __t('tl_table_confirm_revoke', '确认撤销该团队长并恢复标准层级？'); ?>');">
                                <input type="hidden" name="revoke_team_leader" value="1">
                                <input type="hidden" name="revoke_user_id" value="<?php echo $tl['id']; ?>">
                                <button type="submit" class="btn btn-sm btn-danger"><?= __t('tl_table_btn_revoke', '撤销'); ?></button>
                            </form>
                        </td>
                    </tr>
                <?php endforeach; ?>
                </tbody>
            </table>
            </div>
        </div>
<style>
body{background:#f5f7fa;}
.card{border-radius:12px;box-shadow:0 2px 12px rgba(0,0,0,0.08);margin-bottom:32px;}
.table{width:100%;min-width:600px;table-layout:auto;}
@media (max-width: 900px) { .table{min-width:0;font-size:13px;} }

/* ====== 科技感卡片 ====== */
.neon-card {
    background: linear-gradient(135deg, #0f2027 0%, #203a43 50%, #2c5364 100%);
    border: 1.5px solid #00eaff;
    border-radius: 18px;
    box-shadow: 0 4px 24px rgba(0,234,255,0.08), 0 2px 0 #00eaff inset;
    transition: transform 0.18s, box-shadow 0.18s;
    color:#fff;
}
.neon-card:hover {
    transform: translateY(-4px) scale(1.02);
    box-shadow: 0 6px 28px rgba(0,234,255,0.18), 0 2px 0 #3fa7ff inset;
}

/* 表格科技感 */
.table thead th {background:#00eaff22;color:#00eaff;border-color:#00eaff55;}
.table tbody tr:hover {background:#00eaff11;}
.table td, .table th {vertical-align:middle;color:#e3f9ff;}
</style>
<script>
function updateTeamLeaderCode() {
    var sel = document.querySelector('select[name=role_id]');
    var code = '';
    if(sel.value) {
        var rid = parseInt(sel.value);
        if (rid === 39) {
            code = '0';
        } else {
            code = String.fromCharCode(65 + (rid-13));
        }
    }
    document.getElementById('team_leader_code').value = code;
}

// 编辑按钮回填
function editTL(uid, roleId, code, rate, lvl){
    document.querySelector('input[name=target_user_id]').value = uid;
    document.querySelector('select[name=role_id]').value = roleId;
    // 解除禁用,确保可选
    var sel=document.querySelector('select[name=role_id]');
    for(var i=0;i<sel.options.length;i++){
        if(sel.options[i].value==roleId){ sel.options[i].disabled=false; break; }
    }
    updateTeamLeaderCode();
    document.getElementById('team_leader_code').value = code;
    document.querySelector('input[name=team_leader_commission]').value = rate;
    document.querySelector('select[name=commission_levels]').value = lvl;
    document.querySelector('button[type=submit]').innerText='更新';
    document.getElementById('ref_code_suffix').value='';
}
</script>
<script>
// 选择团队长时，回填层级数、专属返佣；并使用预嵌 JSON 回填各层比例
document.addEventListener('DOMContentLoaded', function(){
    var sel = document.getElementById('rates_team_leader_id');
    if (!sel) return;
    var budget = (function(){
        var el = document.getElementById('tlRateSummary');
        if (!el) return 36;
        var m = el.textContent.match(/预算\s([0-9.]+)/);
        return m ? parseFloat(m[1]) : 36;
    })();
    var DEFAULT_RATES = [10,6,4,4,4,4,4];
    var lvSelGlobal = document.getElementById('rates_commission_levels');
    function applyLevelVisibility(levelNum){
        var lvl = parseInt(levelNum||'7');
        for (var i=1;i<=7;i++){
            var el = document.getElementById('rate'+i);
            if (!el) continue;
            var wrapper = el.closest ? el.closest('.col-md-2') : el.parentElement;
            var enabled = i <= lvl;
            el.disabled = !enabled;
            if (!enabled) el.value = 0;
            if (wrapper) wrapper.style.display = enabled ? '' : 'none';
        }
    }
    function updateSummary(){
        var sum = 0;
        for (var i=1;i<=7;i++){
            var el = document.getElementById('rate'+i);
            if (el) sum += parseFloat(el.value||0);
        }
        var tip = document.getElementById('tlRateSummary');
        if (tip) tip.textContent = '合计 ' + sum.toFixed(2) + '% / 预算 ' + budget + '%';
        return sum;
    }
    function applyOpt(opt){
        if (!opt) return;
        var levels = opt.getAttribute('data-levels');
        var tlb = opt.getAttribute('data-tlb');
        var allowPartnerSite = opt.getAttribute('data-allow-partner-site');
        var lvSel = document.getElementById('rates_commission_levels');
        if (lvSel && levels) lvSel.value = levels;
        applyLevelVisibility(levels);
        var tlInput = document.getElementById('rates_tl_bonus_rate');
        if (tlInput && tlb !== null) tlInput.value = tlb;
        var allowCheckbox = document.getElementById('rates_allow_partner_site');
        if (allowCheckbox && allowPartnerSite !== null) {
            allowCheckbox.checked = allowPartnerSite == '1';
        }
        // 从内嵌 JSON 中回填比例
        try {
            var mapEl = document.getElementById('tlRatesMap');
            if (mapEl && mapEl.textContent) {
                var m = JSON.parse(mapEl.textContent);
                var tlId = opt.value;
                var arr = (m && m[tlId]) ? m[tlId] : DEFAULT_RATES;
                var lvlNum = parseInt((levels||'7'));
                for (var i=1;i<=7;i++){
                    var el = document.getElementById('rate'+i);
                    if (!el) continue;
                    var val = (i <= lvlNum) ? (arr[i-1]||0) : 0;
                    el.value = val;
                }
                updateSummary();
            }
        } catch(e) {}
    }
    sel.addEventListener('change', function(){
        applyOpt(this.options[this.selectedIndex]);
    });
    // 初次加载：优先用上次提交但未保存的值回显，否则按当前选择回填
    var TL_POSTED = (function(){
        try { return JSON.parse(document.getElementById('TL_POSTED_JSON').textContent); } catch(e) { return null; }
    })();
    if (TL_POSTED && TL_POSTED.tlId) {
        for (var i=0;i<sel.options.length;i++) {
            if (sel.options[i].value==String(TL_POSTED.tlId)) { sel.selectedIndex = i; break; }
        }
        var lvSel = document.getElementById('rates_commission_levels');
        if (lvSel) lvSel.value = TL_POSTED.levels || 7;
        applyLevelVisibility(lvSel ? lvSel.value : 7);
        var tlInput = document.getElementById('rates_tl_bonus_rate');
        if (tlInput) tlInput.value = TL_POSTED.tlb || '';
        var allowCheckbox = document.getElementById('rates_allow_partner_site');
        if (allowCheckbox && TL_POSTED.allowPartnerSite !== undefined) {
            allowCheckbox.checked = TL_POSTED.allowPartnerSite == 1;
        }
        var arr = TL_POSTED.rates || [];
        for (var i=1;i<=7;i++) {
            var el = document.getElementById('rate'+i);
            if (el) el.value = (arr[i-1]!==undefined && arr[i-1]!==null) ? arr[i-1] : 0;
        }
        updateSummary();
    } else if (sel.selectedIndex > 0) {
        applyOpt(sel.options[sel.selectedIndex]);
    }
    // 监听比例输入变化，实时更新合计提示
    for (var i=1;i<=7;i++){
        var el = document.getElementById('rate'+i);
        if (el) el.addEventListener('input', updateSummary);
    }
    // 监听层级数选择，联动显示/隐藏各层输入
    if (lvSelGlobal) {
        lvSelGlobal.addEventListener('change', function(){
            applyLevelVisibility(this.value);
            updateSummary();
        });
    }
    // 提交前校验合计不超过预算
    var form = document.getElementById('tlRatesForm');
    if (form) {
        form.addEventListener('submit', function(e){
            var sum = updateSummary();
            if (sum > budget + 1e-8) {
                e.preventDefault();
                alert('保存失败：各层比例之和不得超过 '+budget+'%');
            }
        });
    }
});
</script>
<?php
// 构建各团队长的分层比例映射（仅供回填使用，不影响布局）
$ratesMap = [];
// 遍历 $team_leaders 数组，从其中提取 level_rates_json
foreach ($team_leaders as $tl) {
    $arr = json_decode($tl['level_rates_json'] ?? '[]', true);
    if (!is_array($arr) || empty($arr)) {
        // 未配置则默认不分配（全为0）
        $arr = [0,0,0,0,0,0,0];
    }
    // 填充到 7 位，不足补0
    for ($i=count($arr); $i<7; $i++) { $arr[$i] = 0; }
    $arr = array_map('floatval', $arr);
    $ratesMap[$tl['id']] = $arr;
}

// 将 $ratesMap 编码为 JSON 并输出到页面供 JS 使用
?>
<script id="tlRatesMap" type="application/json"><?php echo json_encode($ratesMap, JSON_UNESCAPED_UNICODE); ?></script>
<?php
// 输出上次提交但未保存成功的比例等，供JS优先回显
$posted_payload = null;
if (!empty($pref_rates_tl_id)) {
    $arr = [];
    for ($i=1;$i<=7;$i++) { $arr[] = is_numeric($pref_rates_arr[$i]) ? floatval($pref_rates_arr[$i]) : 0; }
    $posted_payload = [
        'tlId' => $pref_rates_tl_id,
        'levels' => $pref_rates_levels ?: 7,
        'tlb' => $pref_rates_tlb,
        'rates' => $arr,
        'allowPartnerSite' => $pref_rates_allow_partner_site,
    ];
}
?>
<script id="TL_POSTED_JSON" type="application/json"><?php echo $posted_payload ? json_encode($posted_payload, JSON_UNESCAPED_UNICODE) : 'null'; ?></script>
<?php
$pageContent = ob_get_clean();
require_once 'includes/layout.php'; 