/**
 * AI 图标配色管理器
 * 统一管理小程序前端的 AI 图标配色策略
 * 基于 VI-DESIGN-SYSTEM.md 6.6-6.7 节
 */

/**
 * AI 配色方案定义
 * 每种配色包含：主色、浅色、深色三个层级
 */
export const AI_COLOR_SCHEMES = {
  red: {
    name: 'red',
    label: 'Red',
    from: '#e74c3c',
    to: '#f39c9c',
    fromDeep: '#c0392b',
    toDeep: '#e74c3c',
    className: 'ai-color-red',
  },
  orange: {
    name: 'orange',
    label: 'Orange',
    from: '#e67e22',
    to: '#f5c77e',
    fromDeep: '#ca6c17',
    toDeep: '#e67e22',
    className: 'ai-color-orange',
  },
  yellow: {
    name: 'yellow',
    label: 'Yellow',
    from: '#d4a017',
    to: '#f7dc6f',
    fromDeep: '#b8860b',
    toDeep: '#d4a017',
    className: 'ai-color-yellow',
  },
  blue: {
    name: 'blue',
    label: 'Blue',
    from: '#2980b9',
    to: '#7ec8e3',
    fromDeep: '#1a5276',
    toDeep: '#2980b9',
    className: 'ai-color-blue',
  },
  indigo: {
    name: 'indigo',
    label: 'Indigo',
    from: '#667eea',
    to: '#a78bfa',
    fromDeep: '#4a5fc7',
    toDeep: '#667eea',
    className: 'ai-color-indigo',
  },
  purple: {
    name: 'purple',
    label: 'Purple',
    from: '#764ba2',
    to: '#c084fc',
    fromDeep: '#5b3080',
    toDeep: '#764ba2',
    className: 'ai-color-purple',
  },
} as const;

export type AiColorName = keyof typeof AI_COLOR_SCHEMES;

/**
 * 页面级 AI 配色建议
 * 参考 VI-DESIGN-SYSTEM.md 6.7 节
 */
export const PAGE_AI_COLOR_RECOMMENDATIONS: Record<string, AiColorName | 'random'> = {
  'task-list': 'random', // 每日新鲜感
  'task-detail': 'indigo', // 通用默认
  'task-detail-callback': 'orange', // 与 banner 主题色呼应
  'task-detail-relationship': 'purple', // 与 banner 粉色系呼应
  'performance': 'blue', // 数据分析感
  'customer-detail': 'purple', // 黑金页面，紫色点缀
  'board-coach': 'red', // coral banner 配红色 AI
  'board-customer': 'yellow', // 黑金页面，黄色点缀
  'board-finance': 'purple', // 已正确应用
  'notes': 'indigo', // 通用默认
  'reviewing': 'orange', // 审核流程，橙色提示
  'apply': 'blue', // 申请流程，蓝色信息
  'login': 'indigo', // 登录页，靛色默认
  'no-permission': 'red', // 权限提示，红色警示
};

/**
 * 获取随机 AI 配色
 * @returns 随机选择的配色方案
 */
export function getRandomAiColor(): typeof AI_COLOR_SCHEMES[AiColorName] {
  const colors = Object.values(AI_COLOR_SCHEMES);
  return colors[Math.floor(Math.random() * colors.length)];
}

/**
 * 获取指定名称的 AI 配色
 * @param colorName - 配色名称
 * @returns 配色方案，如果不存在则返回 indigo（默认）
 */
export function getAiColor(colorName: AiColorName | string): typeof AI_COLOR_SCHEMES[AiColorName] {
  return AI_COLOR_SCHEMES[colorName as AiColorName] || AI_COLOR_SCHEMES.indigo;
}

/**
 * 获取页面推荐的 AI 配色
 * @param pageName - 页面名称（通常为 route.name 或自定义标识）
 * @returns 配色方案
 */
export function getPageAiColor(pageName: string): typeof AI_COLOR_SCHEMES[AiColorName] {
  const recommendation = PAGE_AI_COLOR_RECOMMENDATIONS[pageName];

  if (recommendation === 'random') {
    return getRandomAiColor();
  }

  if (recommendation) {
    return getAiColor(recommendation);
  }

  // 未配置的页面默认使用 indigo
  return AI_COLOR_SCHEMES.indigo;
}

/**
 * 页面初始化 AI 配色
 * 在页面 onLoad 时调用，自动设置 data.aiColor 和页面类名
 *
 * @example
 * ```typescript
 * Page({
 *   onLoad() {
 *     const { aiColor, className } = initPageAiColor('task-list');
 *     this.setData({ aiColor });
 *     // 可选：添加页面类名以应用 CSS 变量
 *     wx.pageContainer?.classList.add(className);
 *   }
 * })
 * ```
 */
export function initPageAiColor(pageName: string) {
  const colorScheme = getPageAiColor(pageName);
  return {
    aiColor: colorScheme.name,
    className: colorScheme.className,
    colorScheme,
  };
}

/**
 * 获取 AI 配色的 CSS 变量值
 * 用于动态设置样式
 *
 * @example
 * ```typescript
 * const cssVars = getAiColorCssVars('purple');
 * // { '--ai-from': '#764ba2', '--ai-to': '#c084fc', ... }
 * ```
 */
export function getAiColorCssVars(colorName: AiColorName | string): Record<string, string> {
  const color = getAiColor(colorName);
  return {
    '--ai-from': color.from,
    '--ai-to': color.to,
    '--ai-from-deep': color.fromDeep,
    '--ai-to-deep': color.toDeep,
  };
}

/**
 * 获取所有可用的 AI 配色列表
 * @returns 配色名称数组
 */
export function getAllAiColors(): AiColorName[] {
  return Object.keys(AI_COLOR_SCHEMES) as AiColorName[];
}

/**
 * 验证配色名称是否有效
 * @param colorName - 配色名称
 * @returns 是否有效
 */
export function isValidAiColor(colorName: string): colorName is AiColorName {
  return colorName in AI_COLOR_SCHEMES;
}
