/**
 * 号码分类工具
 * 根据冠字号自动分类为：圆圆号、倒置号、金马王、金马号、金山王、天马王、金山号、天马号、朦胧号、如意号、钻石号、永恒号、带7号、带4号
 */

// 分类定义（按优先级排序）
const CATEGORIES = [
  { name: '圆圆号', mustNot: ['1','2','3','4','5','7'], mustHave: [] },
  { name: '倒置号', mustNot: ['2','3','4','5','7'], mustHave: ['1'] },
  { name: '金马王', mustNot: ['1','2','3','4','7'], mustHave: ['5'] },
  { name: '金马号', mustNot: ['2','3','4','7'], mustHave: ['1','5'] },
  { name: '金山王', mustNot: ['1','2','4','5','7'], mustHave: ['3'] },
  { name: '天马王', mustNot: ['1','2','4','7'], mustHave: ['3','5'] },
  { name: '金山号', mustNot: ['2','4','5','7'], mustHave: ['1','3'] },
  { name: '天马号', mustNot: ['2','4','7'], mustHave: ['1','3','5'] },
  { name: '朦胧号', mustNot: ['3','4','5','7'], mustHave: [] },
  { name: '如意号', mustNot: ['1','3','4','7'], mustHave: [] },
  { name: '钻石号', mustNot: ['3','4','7'], mustHave: [] },
  { name: '永恒号', mustNot: ['4','7'], mustHave: [] },
  { name: '带7号', mustNot: ['4'], mustHave: ['7'] },
  { name: '带4号', mustNot: [], mustHave: ['4'] },
]

/**
 * 提取冠字号中的数字部分
 * @param {string} serial - 冠字号，如 J0123456789 或 J0123456781 或 J0123456701
 * @returns {object} - { digits: 数字串, type: 'single'|'ten'|'hundred' }
 */
export function extractDigits(serial) {
  if (!serial) return { digits: '', type: 'single' }
  
  // 去掉J，取数字部分
  const nums = serial.replace(/J/g, '').replace(/\D/g, '')
  
  // 判断类型
  if (nums.endsWith('01')) {
    // 标百：去掉最后2位
    return { digits: nums.slice(0, -2), type: 'hundred' }
  } else if (nums.endsWith('1')) {
    // 标十：去掉最后1位
    return { digits: nums.slice(0, -1), type: 'ten' }
  } else {
    // 单张：全部数字
    return { digits: nums, type: 'single' }
  }
}

/**
 * 号码分类函数
 * @param {string} serial - 冠字号
 * @returns {string} - 分类名称
 */
export function getNumberCategory(serial) {
  const { digits } = extractDigits(serial)
  
  if (!digits || digits.length < 7) {
    return '其他'
  }
  
  // 按优先级匹配
  for (const cat of CATEGORIES) {
    if (matchesCategory(digits, cat)) {
      return cat.name
    }
  }
  
  return '其他'
}

/**
 * 检查数字是否匹配分类条件
 * @param {string} digits - 数字串
 * @param {object} category - 分类定义
 * @returns {boolean}
 */
function matchesCategory(digits, category) {
  const mustNot = category.mustNot
  const mustHave = category.mustHave
  
  // 1. 检查必须不含的数字
  for (const n of mustNot) {
    if (digits.includes(n)) {
      return false
    }
  }
  
  // 2. 检查必须含有的数字
  for (const n of mustHave) {
    if (!digits.includes(n)) {
      return false
    }
  }
  
  return true
}

/**
 * 获取分类颜色
 * @param {string} category - 分类名称
 * @returns {string} - 颜色 hex
 */
export function getNumberCategoryColor(category) {
  const colors = {
    '圆圆号': '#8b5cf6',   // 紫
    '倒置号': '#ec4899',   // 粉
    '金马王': '#f59e0b',   // 金
    '金马号': '#ef4444',   // 红
    '金山王': '#14b8a6',   // 青
    '天马王': '#06b6d4',   // 蓝
    '金山号': '#0d9488',   // 绿松石
    '天马号': '#22c55e',   // 绿
    '朦胧号': '#6366f1',   // 靛蓝
    '如意号': '#a855f7',   // 紫红
    '钻石号': '#eab308',   // 黄
    '永恒号': '#3b82f6',   // ���
    '带7号': '#f97316',   // 橙
    '带4号': '#64748b',   // 灰
    '其他': '#94a3b8',
  }
  return colors[category] || colors['其他']
}

/**
 * 分类优先级（用于排序）
 */
export const NUMBER_CATEGORY_ORDER = CATEGORIES.map(c => c.name)

// 可选值列表（用于下拉框）
export const NUMBER_CATEGORY_OPTIONS = CATEGORIES.map(c => ({ value: c.name, label: c.name }))
