/**
 * Lộc Tồn / Thiên Mã / Thiên Ất Quý Nhân — 3 thần sát quan trọng
 * theo Thiên Can hoặc Địa Chi của trụ năm sinh.
 *
 * Vị trí trên la bàn dùng để bố trí phong thủy: đặt biểu tượng tài lộc
 * (Lộc), ngựa (Mã), Phật thủ/quý nhân (Quý) tại các hướng tương ứng.
 */

import type { Direction } from "./flying-stars";

export type CanName =
  | "Giáp"
  | "Ất"
  | "Bính"
  | "Đinh"
  | "Mậu"
  | "Kỷ"
  | "Canh"
  | "Tân"
  | "Nhâm"
  | "Quý";

export type ChiName =
  | "Tý"
  | "Sửu"
  | "Dần"
  | "Mão"
  | "Thìn"
  | "Tỵ"
  | "Ngọ"
  | "Mùi"
  | "Thân"
  | "Dậu"
  | "Tuất"
  | "Hợi";

const CANS: CanName[] = ["Giáp", "Ất", "Bính", "Đinh", "Mậu", "Kỷ", "Canh", "Tân", "Nhâm", "Quý"];

const CHIS: ChiName[] = [
  "Tý",
  "Sửu",
  "Dần",
  "Mão",
  "Thìn",
  "Tỵ",
  "Ngọ",
  "Mùi",
  "Thân",
  "Dậu",
  "Tuất",
  "Hợi",
];

/**
 * Tính trụ năm theo lịch can chi.
 * Năm 1984 = Giáp Tý (mốc chuẩn).
 *   canIndex = (year - 4) mod 10
 *   chiIndex = (year - 4) mod 12
 * Lưu ý: dùng mốc Lập Xuân (~4/2). Tham số `year` đã được chuẩn hóa
 * (sinh trước Lập Xuân thì truyền year-1) — ở phía gọi.
 */
export function pillarOfYear(year: number): { can: CanName; chi: ChiName } {
  const cy = (((year - 4) % 10) + 10) % 10;
  const cz = (((year - 4) % 12) + 12) % 12;
  return { can: CANS[cy], chi: CHIS[cz] };
}

/**
 * Lộc Tồn (Thiên Lộc) — theo Thiên Can.
 * Bảng cổ điển (chi):
 *   Giáp→Dần, Ất→Mão, Bính/Mậu→Tỵ, Đinh/Kỷ→Ngọ,
 *   Canh→Thân, Tân→Dậu, Nhâm→Hợi, Quý→Tý
 */
const LOC_TON_BY_CAN: Record<CanName, ChiName> = {
  Giáp: "Dần",
  Ất: "Mão",
  Bính: "Tỵ",
  Đinh: "Ngọ",
  Mậu: "Tỵ",
  Kỷ: "Ngọ",
  Canh: "Thân",
  Tân: "Dậu",
  Nhâm: "Hợi",
  Quý: "Tý",
};

/**
 * Thiên Mã — theo Địa Chi (tam hợp tiến 1 bước).
 *   Thân-Tý-Thìn → Mã ở Dần
 *   Dần-Ngọ-Tuất → Mã ở Thân
 *   Tỵ-Dậu-Sửu  → Mã ở Hợi
 *   Hợi-Mão-Mùi → Mã ở Tỵ
 */
const THIEN_MA_BY_CHI: Record<ChiName, ChiName> = {
  Thân: "Dần",
  Tý: "Dần",
  Thìn: "Dần",
  Dần: "Thân",
  Ngọ: "Thân",
  Tuất: "Thân",
  Tỵ: "Hợi",
  Dậu: "Hợi",
  Sửu: "Hợi",
  Hợi: "Tỵ",
  Mão: "Tỵ",
  Mùi: "Tỵ",
};

/**
 * Thiên Ất Quý Nhân — theo Thiên Can (mỗi can có 2 quý nhân, dương quý / âm quý).
 *   Giáp Mậu Canh → Sửu, Mùi
 *   Ất Kỷ        → Tý, Thân
 *   Bính Đinh    → Hợi, Dậu
 *   Tân          → Dần, Ngọ
 *   Nhâm Quý     → Tỵ, Mão
 */
const QUY_NHAN_BY_CAN: Record<CanName, [ChiName, ChiName]> = {
  Giáp: ["Sửu", "Mùi"],
  Mậu: ["Sửu", "Mùi"],
  Canh: ["Sửu", "Mùi"],
  Ất: ["Tý", "Thân"],
  Kỷ: ["Tý", "Thân"],
  Bính: ["Hợi", "Dậu"],
  Đinh: ["Hợi", "Dậu"],
  Tân: ["Dần", "Ngọ"],
  Nhâm: ["Tỵ", "Mão"],
  Quý: ["Tỵ", "Mão"],
};

/**
 * Map địa chi sang hướng la bàn (24 sơn rút gọn về 8 hướng + trung).
 *   Tý → Bắc
 *   Sửu, Dần → Đông Bắc
 *   Mão → Đông
 *   Thìn, Tỵ → Đông Nam
 *   Ngọ → Nam
 *   Mùi, Thân → Tây Nam
 *   Dậu → Tây
 *   Tuất, Hợi → Tây Bắc
 */
const CHI_TO_DIRECTION: Record<ChiName, Direction> = {
  Tý: "Bắc",
  Sửu: "Đông Bắc",
  Dần: "Đông Bắc",
  Mão: "Đông",
  Thìn: "Đông Nam",
  Tỵ: "Đông Nam",
  Ngọ: "Nam",
  Mùi: "Tây Nam",
  Thân: "Tây Nam",
  Dậu: "Tây",
  Tuất: "Tây Bắc",
  Hợi: "Tây Bắc",
};

export type ThanSat = {
  loc: { chi: ChiName; direction: Direction };
  ma: { chi: ChiName; direction: Direction };
  quy: { chis: [ChiName, ChiName]; directions: [Direction, Direction] };
};

export function calculateThanSat(year: number): ThanSat & {
  pillar: { can: CanName; chi: ChiName };
} {
  const pillar = pillarOfYear(year);
  const locChi = LOC_TON_BY_CAN[pillar.can];
  const maChi = THIEN_MA_BY_CHI[pillar.chi];
  const quyChis = QUY_NHAN_BY_CAN[pillar.can];

  return {
    pillar,
    loc: {
      chi: locChi,
      direction: CHI_TO_DIRECTION[locChi],
    },
    ma: {
      chi: maChi,
      direction: CHI_TO_DIRECTION[maChi],
    },
    quy: {
      chis: quyChis,
      directions: [CHI_TO_DIRECTION[quyChis[0]], CHI_TO_DIRECTION[quyChis[1]]],
    },
  };
}

export const THAN_SAT_DESCRIPTIONS = {
  loc: {
    name: "Thiên Lộc (Lộc Tồn)",
    meaning:
      "Hướng tài lộc cố định theo trụ năm sinh — đặt két sắt, bàn làm việc tài chính, vật phẩm chiêu tài (cây kim tiền, tỳ hưu, thiềm thừ ba chân) tại đây để khai thác vận tài.",
    activate: "Vật phong thủy chiêu tài, đèn vàng ấm, chậu cây xanh tươi.",
  },
  ma: {
    name: "Thiên Mã (Dịch Mã)",
    meaning:
      "Hướng di chuyển, công danh xa nhà, xuất hành. Người làm sales, đi công tác nhiều, kinh doanh xuất nhập khẩu nên kích hoạt hướng này để công việc thuận buồm.",
    activate: "Tượng ngựa phong thủy (1, 6 hoặc 8 con — tránh 5), tranh ngựa phi.",
  },
  quy: {
    name: "Thiên Ất Quý Nhân",
    meaning:
      "Hai hướng có quý nhân phù trợ — gặp người giúp đỡ, hóa hung thành cát, đặc biệt khi gặp khó khăn. Đặt vật phẩm tâm linh nhẹ (Phật thủ, ngọc, đá thạch anh) tại đây để mời quý nhân.",
    activate: "Đá thạch anh hồng/trắng, tượng Phật nhỏ, hoa tươi, đèn dịu.",
  },
} as const;
