/**
 * 主题令牌定义（plan.md「1.2 主题系统」）。
 *
 * 设计原则：组件引用语义化令牌名称（如 theme.colors.bgPrimary），不直接引用颜色值。
 * 主题切换通过令牌映射实现，组件无需改动。
 * 参考 BeeCount 的 `lib/styles/tokens.dart` 设计令牌体系。
 */

/** 财务语义色：收入/支出/转账，影响用户对资金流向的直觉认知。 */
export interface FinancialColors {
  income: string;       // 收入色（默认绿色）
  expense: string;      // 支出色（默认红色）
  transfer: string;     // 转账色（默认蓝色）
}

export interface ThemeColors {
  // 背景层级
  bgPrimary: string;      // 页面背景
  bgSecondary: string;    // 卡片/容器背景
  bgTertiary: string;     // 输入框/次级容器

  // 前景色
  fgPrimary: string;      // 主要文字
  fgSecondary: string;    // 次要文字
  fgInverse: string;      // 反色文字（深色背景上的文字）

  // 强调色（主题色）
  accent: string;         // 主题色（按钮、链接、选中态）
  accentLight: string;    // 主题色浅色变体（背景高亮）
  accentDark: string;     // 主题色深色变体

  // 语义色
  success: string;
  warning: string;
  error: string;
  info: string;

  // 财务语义色
  financial: FinancialColors;

  // 边框与分割
  border: string;
  divider: string;

  // 特殊场景
  overlay: string;        // 遮罩层
  skeleton: string;       // 骨架屏
  progressBg: string;     // 进度条/分割线背景色
}

export interface ThemeSpacing {
  xs: number;
  sm: number;
  md: number;
  lg: number;
  xl: number;
}

export interface ThemeRadii {
  sm: number;
  md: number;
  lg: number;
  xl: number;   // 卡片默认大圆角（24）
  full: number;
}

export interface ThemeTypographyEntry {
  fontSize: number;
  /** React Native 的 fontWeight 是字面量联合类型，这里对齐以避免类型不兼容。 */
  fontWeight: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';
  lineHeight: number;
  /** @deprecated 设计系统已切换为系统字体，预置主题不再设置该字段；引用处将在 P4/P5 逐页移除。 */
  fontFamily?: string;
}

export interface ThemeTypography {
  display: ThemeTypographyEntry;  // 34/800，净资产等大数字
  h1: ThemeTypographyEntry;
  h2: ThemeTypographyEntry;
  h3: ThemeTypographyEntry;
  body: ThemeTypographyEntry;
  bodySmall: ThemeTypographyEntry;
  caption: ThemeTypographyEntry;
}

export interface ThemeShadow {
  shadowColor: string;
  shadowOffset: { width: number; height: number };
  shadowOpacity: number;
  shadowRadius: number;
  elevation: number;
}

export interface ThemeShadows {
  sm: ThemeShadow;
  md: ThemeShadow;
  lg: ThemeShadow;
}

export interface ThemeOpacities {
  pressed: number;   // 统一点击按压透明度 (0.7)
  disabled: number;  // 禁用透明度 (0.4)
}

export interface ThemeTokens {
  colors: ThemeColors;
  spacing: ThemeSpacing;
  radii: ThemeRadii;
  typography: ThemeTypography;
  shadows: ThemeShadows;
  opacities: ThemeOpacities;
}
