/**
 * Vận năm theo 12 con giáp.
 *
 * Cho mỗi con giáp + năm hiện tại (mặc định năm thực tế):
 *   - Quan hệ với năm: Tam Hợp / Lục Hợp / Lục Xung / Lục Hại / Bình Hoà
 *   - Tam Tai: nếu rơi vào nhóm tam tai
 *   - Năm tuổi (Bản Mệnh) — khi cùng chi
 *   - Đánh giá tổng quan: Tốt / Bình thường / Cần thận trọng
 */

import { compat, zodiacFromYear, type ZodiacAnimal } from "./zodiac";

export type YearOutlook = {
  year: number;
  yearAnimal: ZodiacAnimal;
  yearAnimalName: string;
  ownAnimal: ZodiacAnimal;
  ownName: string;
  relation: "Tam Hợp" | "Lục Hợp" | "Bình Hòa" | "Lục Hại" | "Lục Xung";
  relationScore: number; // 0-100
  isOwnYear: boolean;
  tamTai: { active: false } | { active: true; position: 1 | 2 | 3; label: string };
  category: "Tốt" | "Bình thường" | "Cần thận trọng";
  hint: string;
  career: string;
  finance: string;
  love: string;
  health: string;
  caution: string;
};

// Tam Tai — Thân-Tý-Thìn → Tam Tai năm Dần, Mão, Thìn (etc.)
const TAM_TAI_MAP: Record<ZodiacAnimal, ZodiacAnimal[]> = {
  than: ["dan", "mao", "thin"],
  ty: ["dan", "mao", "thin"],
  thin: ["dan", "mao", "thin"],
  dan: ["than", "dau", "tuat"],
  ngo: ["than", "dau", "tuat"],
  tuat: ["than", "dau", "tuat"],
  hoi: ["ti", "ngo", "mui"],
  mao: ["ti", "ngo", "mui"],
  mui: ["ti", "ngo", "mui"],
  ti: ["hoi", "ty", "suu"],
  dau: ["hoi", "ty", "suu"],
  suu: ["hoi", "ty", "suu"],
};

const ANIMAL_NAMES: Record<ZodiacAnimal, string> = {
  ty: "Tý",
  suu: "Sửu",
  dan: "Dần",
  mao: "Mão",
  thin: "Thìn",
  ti: "Tỵ",
  ngo: "Ngọ",
  mui: "Mùi",
  than: "Thân",
  dau: "Dậu",
  tuat: "Tuất",
  hoi: "Hợi",
};

function tamTaiOf(ownAnimal: ZodiacAnimal, yearAnimal: ZodiacAnimal): YearOutlook["tamTai"] {
  const years = TAM_TAI_MAP[ownAnimal];
  const i = years.indexOf(yearAnimal);
  if (i < 0) return { active: false };
  const labels = ["Nhập Tam Tai", "Chính Tam Tai", "Xuất Tam Tai"] as const;
  return { active: true, position: (i + 1) as 1 | 2 | 3, label: labels[i] };
}

export function yearOutlook(ownAnimal: ZodiacAnimal, forYear?: number): YearOutlook {
  const year = forYear ?? new Date().getFullYear();
  const yearZ = zodiacFromYear(year);
  const c = compat(ownAnimal, yearZ.slug);
  const isOwnYear = ownAnimal === yearZ.slug;
  const tamTai = tamTaiOf(ownAnimal, yearZ.slug);

  let category: YearOutlook["category"] = "Bình thường";
  if (tamTai.active && tamTai.position === 2) category = "Cần thận trọng";
  else if (c.level === "Lục Xung") category = "Cần thận trọng";
  else if (c.level === "Lục Hại") category = "Cần thận trọng";
  else if (c.level === "Tam Hợp" || c.level === "Lục Hợp") category = "Tốt";
  else if (isOwnYear) category = "Bình thường"; // năm tuổi không hẳn xấu

  // Hint tổng
  const hintParts: string[] = [];
  if (isOwnYear) hintParts.push(`Năm ${year} là năm tuổi (Bản Mệnh).`);
  hintParts.push(`Quan hệ với năm ${year} (${ANIMAL_NAMES[yearZ.slug]}): ${c.level}.`);
  if (tamTai.active) hintParts.push(`${tamTai.label} — ${tamTai.position}/3.`);
  hintParts.push(c.hint);

  const career =
    category === "Tốt"
      ? "Năm thuận để mở rộng, ký kết hợp đồng lớn, đề xuất thăng tiến. Quý nhân nhiều, dự án dễ trôi."
      : category === "Cần thận trọng"
        ? "Hạn chế ký kết hợp đồng dài hạn hoặc chuyển việc đột ngột. Củng cố nội lực, học thêm kỹ năng. Tránh tranh chấp."
        : "Bình thường — duy trì kế hoạch hiện tại, không nên đầu tư mạo hiểm cũng không nên trì hoãn quá lâu.";

  const finance =
    category === "Tốt"
      ? "Tài lộc thuận. Đầu tư trung-dài hạn dễ sinh lời. Có cơ hội thu nhập phụ."
      : category === "Cần thận trọng"
        ? "Hạn chế vay mượn hoặc cho vay. Cẩn trọng với hợp đồng góp vốn. Giữ quỹ dự phòng 6 tháng chi tiêu."
        : "Bình ổn. Tích lũy đều, không nên đột ngột thay đổi danh mục đầu tư.";

  const love =
    category === "Tốt"
      ? "Năm cát lợi cho hôn sự. Người độc thân dễ gặp duyên qua bạn bè, đồng nghiệp. Cặp đôi nên đầu tư cho mối quan hệ."
      : category === "Cần thận trọng"
        ? "Dễ hiểu lầm, cãi vã. Tránh quyết định hôn sự lớn trong năm. Cặp đôi cần kiên nhẫn lắng nghe, không nên nói lời tổn thương lúc nóng giận."
        : "Bình ổn. Người độc thân vẫn có cơ hội gặp duyên — không vội. Cặp đôi vun đắp đều đặn.";

  const health =
    isOwnYear || (tamTai.active && tamTai.position === 2)
      ? "Năm tuổi / Chính Tam Tai — chú ý sức khoẻ tổng quát, đặc biệt hệ tim mạch và thần kinh. Khám định kỳ 6 tháng/lần. Ngủ đủ giấc."
      : category === "Cần thận trọng"
        ? "Cẩn trọng các bệnh mãn tính. Tránh thức khuya và rượu bia. Tập thể dục nhẹ đều đặn."
        : "Bình thường. Duy trì lối sống lành mạnh.";

  const caution = isOwnYear
    ? "Năm tuổi nên đeo màu hợp Mệnh, hạn chế việc lớn (cưới, xây nhà, mở công ty) trừ khi đã chọn ngày kỹ."
    : tamTai.active && tamTai.position === 2
      ? "Chính Tam Tai năm nặng nhất. Tránh xuất hành xa đầu năm, tránh khởi sự lớn. Làm phước thiện, lễ giải hạn đầu năm."
      : c.level === "Lục Xung"
        ? "Lục Xung — tránh hợp tác làm ăn với người tuổi xung. Cẩn trọng giao tiếp, xe cộ."
        : c.level === "Lục Hại"
          ? "Lục Hại — đề phòng tiểu nhân. Hợp đồng phải đọc kỹ điều khoản."
          : "Năm thuận lợi — vẫn nên giữ thái độ khiêm tốn, tránh kiêu căng.";

  return {
    year,
    yearAnimal: yearZ.slug,
    yearAnimalName: ANIMAL_NAMES[yearZ.slug],
    ownAnimal,
    ownName: ANIMAL_NAMES[ownAnimal],
    relation: c.level,
    relationScore: c.score,
    isOwnYear,
    tamTai,
    category,
    hint: hintParts.join(" "),
    career,
    finance,
    love,
    health,
    caution,
  };
}
