/**
 * 12 Con Giáp — bảng tra cứu thuần tính.
 *
 * `branch` là Địa Chi (0-11) — Tý=0, Sửu=1, Dần=2, ...
 * Ngũ hành tính theo can-chi của năm sinh; bảng dưới ghi ngũ hành CHI mặc định
 * (Tý-Thủy, Sửu-Thổ...). Để chính xác hơn cần kết hợp Thiên Can — xem
 * lib/calendar/engine.ts cho can-chi đầy đủ.
 */

export type ZodiacAnimal =
  | "ty"
  | "suu"
  | "dan"
  | "mao"
  | "thin"
  | "ti"
  | "ngo"
  | "mui"
  | "than"
  | "dau"
  | "tuat"
  | "hoi";

export type ZodiacEntry = {
  slug: ZodiacAnimal;
  name: string; // "Tý", "Sửu", ...
  english: string; // "Rat", "Ox", ...
  branchIndex: number; // 0-11
  element: "Thủy" | "Hỏa" | "Mộc" | "Kim" | "Thổ";
  yinYang: "Âm" | "Dương";
  traits: string[];
  strengths: string[];
  weaknesses: string[];
  career: string;
  love: string;
  // Tam hợp (3-harmony group): same TamHop key share
  tamHop: "Thân-Tý-Thìn" | "Tỵ-Dậu-Sửu" | "Dần-Ngọ-Tuất" | "Hợi-Mão-Mùi";
  // Lục xung (6-clash partner): the directly opposing branch
  lucXung: ZodiacAnimal;
  description: string;
};

export const ZODIAC: ZodiacEntry[] = [
  {
    slug: "ty",
    name: "Tý",
    english: "Rat",
    branchIndex: 0,
    element: "Thủy",
    yinYang: "Dương",
    traits: ["thông minh", "linh hoạt", "tháo vát", "tiết kiệm"],
    strengths: ["nhanh trí", "giao tiếp tốt", "khả năng thích nghi cao"],
    weaknesses: ["đôi lúc đa nghi", "thiếu kiên định", "lo lắng quá mức"],
    career: "Kinh doanh, môi giới, tài chính, viết lách, IT.",
    love: "Tình cảm chân thành, biết chăm sóc; hợp Thân – Thìn, kỵ Ngọ.",
    tamHop: "Thân-Tý-Thìn",
    lucXung: "ngo",
    description:
      "Người tuổi Tý nhanh nhạy với cơ hội, biết quan sát và lựa thời cơ. Thiên về trí tuệ hơn là sức mạnh, dễ thành công nhờ óc tổ chức và sự khéo léo trong giao tiếp.",
  },
  {
    slug: "suu",
    name: "Sửu",
    english: "Ox",
    branchIndex: 1,
    element: "Thổ",
    yinYang: "Âm",
    traits: ["bền chí", "trung thực", "chăm chỉ", "kỷ luật"],
    strengths: ["nhẫn nại phi thường", "đáng tin cậy", "tinh thần trách nhiệm cao"],
    weaknesses: ["hơi cứng đầu", "ít linh hoạt", "khó thể hiện cảm xúc"],
    career: "Nông nghiệp, bất động sản, kỹ thuật, kế toán, vận tải.",
    love: "Chung thủy, kín đáo, chậm nóng; hợp Tỵ – Dậu, kỵ Mùi.",
    tamHop: "Tỵ-Dậu-Sửu",
    lucXung: "mui",
    description:
      "Tuổi Sửu cần mẫn, đi đường dài. Không hào nhoáng nhưng vững chắc. Một khi đã tin ai sẽ tin đến cùng; một khi đã chọn nghề sẽ làm đến nơi.",
  },
  {
    slug: "dan",
    name: "Dần",
    english: "Tiger",
    branchIndex: 2,
    element: "Mộc",
    yinYang: "Dương",
    traits: ["dũng cảm", "quyết đoán", "đầy năng lượng", "lãnh đạo"],
    strengths: ["dám nghĩ dám làm", "có sức cuốn hút", "thẳng thắn"],
    weaknesses: ["bốc đồng", "dễ nóng giận", "đôi khi liều lĩnh"],
    career: "Chỉ huy, quân sự, thể thao, khởi nghiệp, sales đỉnh cao.",
    love: "Mạnh mẽ, chiếm hữu, lãng mạn; hợp Ngọ – Tuất, kỵ Thân.",
    tamHop: "Dần-Ngọ-Tuất",
    lucXung: "than",
    description:
      "Tuổi Dần sinh ra để dẫn dắt. Khi vào việc thì như hổ vào rừng — không ai cản được. Bí quyết là học cách điềm tĩnh và lắng nghe.",
  },
  {
    slug: "mao",
    name: "Mão",
    english: "Cat",
    branchIndex: 3,
    element: "Mộc",
    yinYang: "Âm",
    traits: ["khéo léo", "nhạy cảm", "ôn hoà", "thẩm mỹ"],
    strengths: ["tinh tế", "ngoại giao tốt", "có gu thẩm mỹ cao"],
    weaknesses: ["hơi nhút nhát", "tránh đối đầu", "đôi khi do dự"],
    career: "Nghệ thuật, thiết kế, ngoại giao, tư vấn, giáo dục.",
    love: "Lãng mạn, kén chọn, cần không gian riêng; hợp Hợi – Mùi, kỵ Dậu.",
    tamHop: "Hợi-Mão-Mùi",
    lucXung: "dau",
    description:
      "Tuổi Mão dịu dàng nhưng có kỷ luật bên trong. Biết khi nào nên rút lui, khi nào nên tiến. Thường thành công nhờ duyên hơn là sức.",
  },
  {
    slug: "thin",
    name: "Thìn",
    english: "Dragon",
    branchIndex: 4,
    element: "Thổ",
    yinYang: "Dương",
    traits: ["uy nghi", "tự tin", "sáng tạo", "khát vọng lớn"],
    strengths: ["có tầm nhìn", "khí chất lãnh đạo bẩm sinh", "may mắn về quan lộc"],
    weaknesses: ["kiêu ngạo", "đặt kỳ vọng quá cao", "đôi khi xa cách"],
    career: "Lãnh đạo, chính trị, kinh doanh quy mô, sáng tạo nội dung.",
    love: "Cuốn hút, mãnh liệt, cần được ngưỡng mộ; hợp Tý – Thân, kỵ Tuất.",
    tamHop: "Thân-Tý-Thìn",
    lucXung: "tuat",
    description:
      "Tuổi Thìn được gọi là 'rồng' không phải vô cớ — họ thường đứng ở vị trí cao trong tổ chức. Sức mạnh đến từ tầm nhìn và sự tự tin tuyệt đối.",
  },
  {
    slug: "ti",
    name: "Tỵ",
    english: "Snake",
    branchIndex: 5,
    element: "Hỏa",
    yinYang: "Âm",
    traits: ["sâu sắc", "mưu lược", "quyến rũ", "trực giác"],
    strengths: ["phân tích sắc bén", "kiên trì âm thầm", "trí tuệ cao"],
    weaknesses: ["đa nghi", "kín đáo quá mức", "hay ghen"],
    career: "Nghiên cứu, đầu tư, tâm lý học, chiến lược, y khoa.",
    love: "Mãnh liệt, ghen tuông, cần độ tin cậy cao; hợp Dậu – Sửu, kỵ Hợi.",
    tamHop: "Tỵ-Dậu-Sửu",
    lucXung: "hoi",
    description:
      "Tuổi Tỵ giỏi đọc người. Họ biết khi nào tấn công, khi nào im lặng. Không nói nhiều nhưng nói thì trúng đích.",
  },
  {
    slug: "ngo",
    name: "Ngọ",
    english: "Horse",
    branchIndex: 6,
    element: "Hỏa",
    yinYang: "Dương",
    traits: ["nhiệt huyết", "tự do", "thẳng thắn", "thích phiêu lưu"],
    strengths: ["năng lượng cao", "lạc quan", "truyền cảm hứng"],
    weaknesses: ["thiếu kiên nhẫn", "hay đổi ý", "dễ chán"],
    career: "Du lịch, truyền thông, thể thao, sales, sự kiện.",
    love: "Nồng nhiệt, không ràng buộc, đam mê; hợp Dần – Tuất, kỵ Tý.",
    tamHop: "Dần-Ngọ-Tuất",
    lucXung: "ty",
    description:
      "Tuổi Ngọ như ngọn lửa — sáng, nóng, di chuyển không ngừng. Không hợp với cuộc sống văn phòng tù túng. Cần một nửa hiểu sự tự do của mình.",
  },
  {
    slug: "mui",
    name: "Mùi",
    english: "Goat",
    branchIndex: 7,
    element: "Thổ",
    yinYang: "Âm",
    traits: ["nhân hậu", "nhẫn nại", "nghệ sĩ", "gia đình"],
    strengths: ["lòng trắc ẩn cao", "óc thẩm mỹ", "tinh thần đồng đội"],
    weaknesses: ["thiếu quyết đoán", "nhạy cảm quá mức", "dễ bị lợi dụng"],
    career: "Nghệ thuật, thủ công, chăm sóc sức khoẻ, ẩm thực, làm vườn.",
    love: "Tình cảm sâu, cần ổn định; hợp Hợi – Mão, kỵ Sửu.",
    tamHop: "Hợi-Mão-Mùi",
    lucXung: "suu",
    description:
      "Tuổi Mùi mang năng lượng nuôi dưỡng. Họ tỏa ra sự dịu dàng khiến người khác muốn gần. Cần học cách bảo vệ ranh giới của bản thân.",
  },
  {
    slug: "than",
    name: "Thân",
    english: "Monkey",
    branchIndex: 8,
    element: "Kim",
    yinYang: "Dương",
    traits: ["thông minh", "tinh nghịch", "linh hoạt", "tò mò"],
    strengths: ["giải quyết vấn đề nhanh", "óc hài hước", "đa tài"],
    weaknesses: ["hay so đo", "thiếu kiên định", "đôi khi gian xảo"],
    career: "Công nghệ, marketing, tài chính, biểu diễn, R&D.",
    love: "Vui vẻ, hay đùa, cần đối tác đủ thông minh; hợp Tý – Thìn, kỵ Dần.",
    tamHop: "Thân-Tý-Thìn",
    lucXung: "dan",
    description:
      "Tuổi Thân là 'siêu kết nối' — họ kết nối ý tưởng với người, người với cơ hội. Giỏi nhiều thứ nhưng thường thiếu một thứ làm đến cùng.",
  },
  {
    slug: "dau",
    name: "Dậu",
    english: "Rooster",
    branchIndex: 9,
    element: "Kim",
    yinYang: "Âm",
    traits: ["chỉn chu", "nguyên tắc", "tự hào", "thẳng thắn"],
    strengths: ["chú ý chi tiết", "đúng giờ", "phân tích tốt"],
    weaknesses: ["cầu toàn quá mức", "hay phán xét", "khó tha thứ"],
    career: "Kế toán, kiểm toán, luật, xuất bản, quản lý chất lượng.",
    love: "Thẳng thắn, kỳ vọng cao, biểu hiện qua hành động; hợp Tỵ – Sửu, kỵ Mão.",
    tamHop: "Tỵ-Dậu-Sửu",
    lucXung: "mao",
    description:
      "Tuổi Dậu xứng đáng được gọi là 'người đáng tin'. Đặc biệt giỏi khi công việc đòi hỏi sự chính xác và tinh thần trách nhiệm cao.",
  },
  {
    slug: "tuat",
    name: "Tuất",
    english: "Dog",
    branchIndex: 10,
    element: "Thổ",
    yinYang: "Dương",
    traits: ["trung thành", "công bằng", "thẳng thắn", "đáng tin"],
    strengths: ["lòng trung thành tuyệt đối", "óc chính trực", "bảo vệ người yếu"],
    weaknesses: ["lo lắng quá mức", "khó tha thứ phản bội", "hơi bi quan"],
    career: "Cảnh sát, luật, y tế, công tác xã hội, an ninh.",
    love: "Chung thủy đến cùng, cần niềm tin tuyệt đối; hợp Dần – Ngọ, kỵ Thìn.",
    tamHop: "Dần-Ngọ-Tuất",
    lucXung: "thin",
    description:
      "Tuổi Tuất là 'người gác đền' — luôn đứng về phía công lý và bảo vệ người thân. Thẳng tính, không thích vòng vo. Một khi đã thân là cả đời.",
  },
  {
    slug: "hoi",
    name: "Hợi",
    english: "Pig",
    branchIndex: 11,
    element: "Thủy",
    yinYang: "Âm",
    traits: ["chân thành", "hào phóng", "lạc quan", "an phận"],
    strengths: ["lòng tốt tự nhiên", "bao dung", "biết hưởng thụ"],
    weaknesses: ["dễ tin người", "ngại xung đột", "hay trì hoãn"],
    career: "Ẩm thực, dịch vụ, chăm sóc, du lịch, nghệ thuật.",
    love: "Chân thành, hài hước, biết chăm; hợp Mão – Mùi, kỵ Tỵ.",
    tamHop: "Hợi-Mão-Mùi",
    lucXung: "ti",
    description:
      "Tuổi Hợi sống thật — không giả tạo, không toan tính. Họ tin vào điều tốt ở mọi người, vì thế thường được yêu mến. Cần học cách nói 'không'.",
  },
];

const BY_INDEX = new Map(ZODIAC.map((z) => [z.branchIndex, z]));
const BY_SLUG = new Map(ZODIAC.map((z) => [z.slug, z]));

/** Tý=0 mapping: year 1924 (giáp tý) anchored. */
export function zodiacFromYear(year: number): ZodiacEntry {
  // 1924 = Giáp Tý → branchIndex 0
  const idx = (((year - 1924) % 12) + 12) % 12;
  return BY_INDEX.get(idx)!;
}

export function zodiacBySlug(slug: string): ZodiacEntry | undefined {
  return BY_SLUG.get(slug.toLowerCase() as ZodiacAnimal);
}

export type CompatLevel = "Tam Hợp" | "Lục Hợp" | "Bình Hòa" | "Lục Hại" | "Lục Xung";

const LUC_HOP: Record<ZodiacAnimal, ZodiacAnimal> = {
  ty: "suu",
  suu: "ty",
  dan: "hoi",
  hoi: "dan",
  mao: "tuat",
  tuat: "mao",
  thin: "dau",
  dau: "thin",
  ti: "than",
  than: "ti",
  ngo: "mui",
  mui: "ngo",
};

const LUC_HAI: Record<ZodiacAnimal, ZodiacAnimal> = {
  ty: "mui",
  mui: "ty",
  suu: "ngo",
  ngo: "suu",
  dan: "ti",
  ti: "dan",
  mao: "thin",
  thin: "mao",
  than: "hoi",
  hoi: "than",
  dau: "tuat",
  tuat: "dau",
};

export function compat(
  a: ZodiacAnimal,
  b: ZodiacAnimal
): {
  level: CompatLevel;
  score: number; // 0-100
  hint: string;
} {
  const za = BY_SLUG.get(a)!;
  const zb = BY_SLUG.get(b)!;

  if (a === b)
    return {
      level: "Bình Hòa",
      score: 65,
      hint: "Cùng tuổi — hiểu nhau nhanh nhưng dễ rơi vào lối mòn. Cần đa dạng hoạt động chung.",
    };
  if (zb.slug === za.lucXung)
    return {
      level: "Lục Xung",
      score: 25,
      hint: "Đối xung trên Địa Chi. Quan điểm và nhịp sống dễ va nhau. Cần kiên nhẫn và quy tắc rõ ràng.",
    };
  if (LUC_HAI[a] === b)
    return {
      level: "Lục Hại",
      score: 40,
      hint: "Có điểm khắc kỵ tiềm ẩn. Hợp tác công việc tạm được nhưng tình cảm cần cẩn trọng.",
    };
  if (za.tamHop === zb.tamHop)
    return {
      level: "Tam Hợp",
      score: 92,
      hint: "Cùng nhóm Tam Hợp — đẳng cấp tương hợp cao nhất. Hỗ trợ nhau cả công danh lẫn tình cảm.",
    };
  if (LUC_HOP[a] === b)
    return {
      level: "Lục Hợp",
      score: 85,
      hint: "Cặp đôi Lục Hợp — bù đắp lẫn nhau, năng lượng âm dương cân bằng.",
    };
  return {
    level: "Bình Hòa",
    score: 65,
    hint: "Không có xung không có hợp đặc biệt. Mức độ hòa hợp phụ thuộc vào nỗ lực và Mệnh-Cung của hai người.",
  };
}
