class LevelConfig {
  final int id;
  final List<int> rowPattern;
  final int poolSize;
  final int? flipBackDelayMs;
  final int? maxMistakes;
  final int? timeSec;
  const LevelConfig({
    required this.id,
    required this.rowPattern,
    required this.poolSize,
    this.flipBackDelayMs,
    this.maxMistakes,
    this.timeSec,
  });
  int get rows => rowPattern.length;
  int get maxCols {
    if (rowPattern.isEmpty) return 0;
    int max = rowPattern.first;
    for (final v in rowPattern) {
      if (v > max) max = v;
    }
    return max;
  }

  int get totalCards {
    int sum = 0;
    for (final v in rowPattern) {
      sum += v;
    }
    return sum;
  }
}

// 15关高难度配置：16张牌起步，容错/时间/延迟全程递减，布局多样，行数≤8
const List<LevelConfig> levels = [
  // 第1关：16张（4×4），基础高难起步
  LevelConfig(
    id: 1,
    rowPattern: [4, 4, 4, 4],
    poolSize: 8,
    flipBackDelayMs: 600,
    maxMistakes: 50,
    timeSec: 90,
  ),
  // 第2关：16张（5+3+5+3），4行交错非对称，记忆干扰提升
  LevelConfig(
    id: 2,
    rowPattern: [5, 3, 5, 3],
    poolSize: 8,
    flipBackDelayMs: 580,
    maxMistakes: 45,
    timeSec: 85,
  ),
  // 第3关：18张（3×6），6行紧凑布局，行数增加+牌数提升
  LevelConfig(
    id: 3,
    rowPattern: [3, 3, 3, 3, 3, 3],
    poolSize: 9,
    flipBackDelayMs: 550,
    maxMistakes: 40,
    timeSec: 80,
  ),
  // 第4关：18张（6+4+4+4），4行非对称，宽列+短列混合
  LevelConfig(
    id: 4,
    rowPattern: [6, 4, 4, 4],
    poolSize: 9,
    flipBackDelayMs: 520,
    maxMistakes: 38,
    timeSec: 78,
  ),
  // 第5关：20张（5×4），4行满列，牌数再提升+列数增加
  LevelConfig(
    id: 5,
    rowPattern: [5, 5, 5, 5],
    poolSize: 10,
    flipBackDelayMs: 500,
    maxMistakes: 35,
    timeSec: 75,
  ),
  // 第6关：20张（4+6+4+6），4行交错宽列，视觉复杂度升级
  LevelConfig(
    id: 6,
    rowPattern: [4, 6, 4, 6],
    poolSize: 10,
    flipBackDelayMs: 480,
    maxMistakes: 32,
    timeSec: 70,
  ),
  // 第7关：24张（4×6），6行满列，牌数大幅提升+行数拉满6行
  LevelConfig(
    id: 7,
    rowPattern: [4, 4, 4, 4, 4, 4],
    poolSize: 12,
    flipBackDelayMs: 450,
    maxMistakes: 30,
    timeSec: 68,
  ),
  // 第8关：24张（7+5+7+5），4行极限交错，宽列差提升记忆难度
  LevelConfig(
    id: 8,
    rowPattern: [6, 5, 6, 5],
    poolSize: 12,
    flipBackDelayMs: 420,
    maxMistakes: 28,
    timeSec: 65,
  ),
  // 第9关：28张（4×7），7行布局，行数接近上限+牌数再提升
  LevelConfig(
    id: 9,
    rowPattern: [4, 4, 4, 4, 4, 4, 4],
    poolSize: 14,
    flipBackDelayMs: 400,
    maxMistakes: 25,
    timeSec: 60,
  ),
  // 第10关：28张（6+5+6+5+6），5行非对称，不规则布局增加记忆压力
  LevelConfig(
    id: 10,
    rowPattern: [6, 5, 6, 5, 6],
    poolSize: 14,
    flipBackDelayMs: 380,
    maxMistakes: 22,
    timeSec: 58,
  ),
  // 第11关：30张（5×6），6行满列，牌数达中高段峰值+列数5列
  LevelConfig(
    id: 11,
    rowPattern: [5, 5, 5, 5, 5, 5],
    poolSize: 15,
    flipBackDelayMs: 350,
    maxMistakes: 20,
    timeSec: 55,
  ),
  // 第12关：30张（7+8+7+8），4行超宽列，列数拉满8列+极端非对称
  LevelConfig(
    id: 12,
    rowPattern: [6, 6, 6, 6],
    poolSize: 15,
    flipBackDelayMs: 320,
    maxMistakes: 18,
    timeSec: 50,
  ),
  // 第13关：36张（6×6），6行满列，牌数大幅提升+高列数，记忆量拉满
  LevelConfig(
    id: 13,
    rowPattern: [6, 6, 6, 6, 6, 6],
    poolSize: 18,
    flipBackDelayMs: 300,
    maxMistakes: 15,
    timeSec: 48,
  ),
  // 第14关：40张（5×8），8行上限，行数拉满+牌数峰值，布局压力拉满
  LevelConfig(
    id: 14,
    rowPattern: [5, 5, 5, 5, 5, 5, 5, 5],
    poolSize: 20,
    flipBackDelayMs: 280,
    maxMistakes: 10,
    timeSec: 45,
  ),
  // 第15关：40张（8+7+8+7+8+7），6行极致交错，全关难度顶峰
  LevelConfig(
    id: 15,
    rowPattern: [6, 6, 6, 6, 6, 6],
    poolSize: 20,
    flipBackDelayMs: 250,
    maxMistakes: 5,
    timeSec: 40,
  ),
];

const Map<String, String> faceMap = {
  'dx': 'faces/96a3be3cf272e017046d1b2674a52bd3.png',
  'ht': 'faces/a2ef406e2c2351e0b9e80029c909242d.png',
  'hx': 'faces/e45ee7ce7e88149af8dd32b27f9512ce.png',
  'hl': 'faces/7d0665438e81d8eceb98c1e31fca80c1.png',
  'js': 'faces/751d31dd6b56b26b29dac2c0e1839e34.png',
  'kl': 'faces/faeac4e1eef307c2ab7b0a3821e6c667.png',
  'm': 'faces/d72d187df41e10ea7d9fcdc7f5909205.png',
  'mf': 'faces/fad6f4e614a212e80c67249a666d2b09.png',
  'mty': 'faces/0a8005f5594bd67041f88c6196192646.png',
  'xg': 'faces/d3d9446802a44259755d38e6d163e820.png',
  'xj': 'faces/6512bd43d9caa6e02c990b0a82652dca.png',
  'xm': 'faces/c20ad4d76fe97759aa27a0c99bff6710.png',
  'xt': 'faces/c51ce410c124a10e0db5e4b97fc2af39.png',
  'xy': 'faces/aab3238922bcc25a6f606eb525ffdc56.png',
  'xz': 'faces/9bf31c7ff062936a96d3c8bd1f8f2ff3.png',
  'xz1': 'faces/c74d97b01eae257e44aa9d5bade97baf.png',
  'xz2': 'faces/70efdf2ec9b086079795c442636b55fb.png',
  'xz3': 'faces/6f4922f45568161a8cdf4ad2299f6d23.png',
  'xz4': 'faces/1f0e3dad99908345f7439f8ffabdffc4.png',
  'xz5': 'faces/98f13708210194c475687be6106a3b84.png',
  'xz6': 'faces/3c59dc048e8850243be8079a5c74d079.png',
  '22': 'faces/b6d767d2f8ed5d21a44b0e5886680cb9.png',
  '23': 'faces/37693cfc748049e45d87b8c7d8b9aacd.png',
  '24': 'faces/1ff1de774005f8da13f42943881c655f.png',
  '25': 'faces/8e296a067a37563370ded05f5a3bf3ec.png',
  '26': 'faces/4e732ced3463d06de0ca9a15b6153677.png',
  '27': 'faces/02e74f10e0327ad868d138f2b4fdd6f0.png',
  '28': 'faces/33e75ff09dd601bbe69f351039152189.png',
  '29': 'faces/6ea9ab1baa0efb9e19094440c317e21b.png',
  '30': 'faces/34173cb38f07f89ddbebc2ac9128303f.png',
  '31': 'faces/c16a5320fa475530d9583c34fd356ef5.png',
};

final List<String> allFaceIds = faceMap.keys.toList();
