import 'package:flutter/material.dart';

/// CEX App 颜色常量
abstract class AppColors {
  // ── 品牌色 ──────────────────────────────────────────
  static const Color brand = Color(0xFFf0b90b); // 主品牌黄色
  static const Color brandDark = Color(0xFFd4a409); // 按下态

  // ── 涨跌色 ──────────────────────────────────────────
  static const Color rise = Color(0xFF0ecb81); // 涨（绿）
  static const Color fall = Color(0xFFf6465d); // 跌（红）

  // ── 深色主题背景 ──────────────────────────────────────
  static const Color darkBg = Color(0xFF0b0e11); // 主背景
  static const Color darkBgSecondary = Color(0xFF1e2329); // 卡片/面板背景
  static const Color darkBgTertiary = Color(0xFF2b3139); // 输入框/分隔背景

  // ── 深色主题文字 ──────────────────────────────────────
  static const Color darkTextPrimary = Color(0xFFEAECEF); // 主文字
  static const Color darkTextSecondary = Color(0xFF848E9C); // 次要文字
  static const Color darkTextDisabled = Color(0xFF474D57); // 禁用文字
  static const Color darkDivider = Color(0xFF2B3139); // 分割线

  // ── 浅色主题背景 ──────────────────────────────────────
  static const Color lightBg = Color(0xFFFFFFFF);
  static const Color lightBgSecondary = Color(0xFFF5F5F5);
  static const Color lightBgTertiary = Color(0xFFEEEEEE);

  // ── 浅色主题文字 ──────────────────────────────────────
  static const Color lightTextPrimary = Color(0xFF1E2329);
  static const Color lightTextSecondary = Color(0xFF707A8A);
  static const Color lightTextDisabled = Color(0xFFB7BDC6);
  static const Color lightDivider = Color(0xFFEAECEF);

  // ── 功能色 ──────────────────────────────────────────
  static const Color error = Color(0xFFf6465d);     // 错误状态（同 fall）
  static const Color warning = Color(0xFFf0b90b);   // 警告状态（同 brand）
  static const Color success = Color(0xFF0ecb81);   // 成功状态（同 rise）

  // ── 深色主题特有背景 ────────────────────────────────
  /// 暗色模式头像/图标占位背景（深蓝黑，比主背景略亮）
  static const Color darkAvatarBg = Color(0xFF1A1D2E);
  /// 暗色模式等级/徽章背景（更深蓝黑，用于 VIP 等级卡片）
  static const Color darkBadgeBg = Color(0xFF1A1A2E);
  /// 暗色模式中间层背景（介于 darkBgSecondary 和 darkBgTertiary 之间）
  static const Color darkBgMid = Color(0xFF333333);

  // ── 标签 / 徽章颜色 ─────────────────────────────────
  /// 蓝色信息标签背景（亮色模式，用于跟单品类标签等）
  static const Color tagBlueBg = Color(0xFFDCEBFF);
  /// 蓝色信息标签文字 / 蓝色强调色 / 链接色
  static const Color tagBlue = Color(0xFF1A6FFF);
  /// 杠杆标签金色文字（区分于品牌黄，专用于倍率展示）
  static const Color leverageGold = Color(0xFFB8940E);
  /// 杠杆标签金色背景（低透明度品牌黄，10%）
  static const Color leverageGoldBg = Color(0x26FFD429);
  /// 紫色等级标识（VIP / 达人等级徽章文字色）
  static const Color rankPurple = Color(0xFF7C6CF5);

  // ── 边框 / 描边 ──────────────────────────────────────
  /// 亮色模式通用边框灰（卡片、控件轮廓描边）
  static const Color lightBorder = Color(0xFFDDDDDD);
  /// 暗色模式卡片微描边（增强层次感，white 10%）
  static const Color darkCardBorder = Color(0x1AFFFFFF);

  // ── 跟单模块特有颜色 ─────────────────────────────────
  /// 跟单统计卡片蓝色背景（深色模式）
  static const Color statCardBgDark = Color(0xFF1E2357);
  /// 跟单统计卡片蓝色背景（浅色模式）
  static const Color statCardBgLight = Color(0xFFEAECFF);
  /// 跟单交易员标签靛蓝色
  static const Color tagIndigo = Color(0xFF6366F1);
  /// 跟单交易员标签靛蓝背景（深色模式）
  static const Color tagIndigoBgDark = Color(0xFF1E1E4E);
  /// 跟单交易员标签靛蓝背景（浅色模式）
  static const Color tagIndigoBgLight = Color(0xFFEEF0FF);

  // ── 选中态 / 浮层遮罩 ────────────────────────────────
  /// 选中态容器背景（品牌黄 12% 透明度，用于 Tab / Chip 选中背景）
  static const Color selectedBg = Color(0x1FF0B90B);
  /// 亮色模式浮层遮罩（用于蒙层、悬浮控件背景，black 5%）
  static const Color overlayLight = Color(0x0D000000);
  /// 暗色模式浮层遮罩（用于蒙层、悬浮控件背景，white 10%）
  static const Color overlayDark = Color(0x1AFFFFFF);

  // ── K 线图表专用颜色 ────────────────────────────────────
  /// K 线折线模式线条色 / VOL 柱 / MACD 柱（蓝色）
  static const Color chartLineBlue = Color(0xFF217AFF);
  /// MA5 指标线（金黄色）
  static const Color chartMa5 = Color(0xFFc0aa56);
  /// MA10 / DIF 指标线（蓝色）
  static const Color chartMa10 = Color(0xFF83c0ff);
  /// MA30 / DEA 指标线（紫色）
  static const Color chartMa30 = Color(0xFFda8ff3);

  /// 根据涨跌幅返回颜色
  static Color changeColor(double change, {bool isDark = true}) {
    if (change > 0) return rise;
    if (change < 0) return fall;
    return isDark ? darkTextSecondary : lightTextSecondary;
  }
}
