/**
 * Giải mộng — keyword dictionary đơn giản.
 *
 * Mỗi entry có:
 * - keywords: list từ khóa Vietnamese (lowercased, no diacritics) để fuzzy match
 * - meaning: ý nghĩa folklore Việt Nam
 * - lottery: 2-3 con số liên quan (theo lô đề dân gian — chỉ mang tính tham khảo
 *            văn hoá, KHÔNG khuyến khích đánh bạc)
 */

export type DreamEntry = {
  id: string;
  title: string;
  keywords: string[]; // normalized (no diacritics, lowercase)
  meaning: string;
  lottery?: string[]; // ["12", "21"]
};

export const DREAMS: DreamEntry[] = [
  {
    id: "rang",
    title: "Răng",
    keywords: ["rang", "rung rang", "gay rang", "rang rung"],
    meaning:
      "Mộng thấy răng rụng thường liên quan đến lo lắng về sự mất mát hoặc thay đổi trong gia đình. Với người trẻ có thể là dấu hiệu trưởng thành. Đông y xem là báo hiệu sức khoẻ thận khí cần chú ý.",
    lottery: ["56", "65"],
  },
  {
    id: "ran",
    title: "Rắn",
    keywords: ["ran", "ran can", "ran cuon"],
    meaning:
      "Rắn đại diện cho tiền bạc hoặc người khác giới. Mộng thấy rắn vào nhà thường là điềm tài lộc; rắn cắn có thể là cảnh báo về quan hệ tình cảm hoặc kẻ tiểu nhân.",
    lottery: ["32", "23", "85"],
  },
  {
    id: "nuoc",
    title: "Nước",
    keywords: ["nuoc", "song", "bien", "lu lut", "ngap nuoc"],
    meaning:
      "Nước trong sạch là điềm tốt — tài lộc và bình an. Nước đục, lụt lội là lo lắng đang tích tụ. Bơi trong nước cho thấy bạn đang xử lý cảm xúc sâu.",
    lottery: ["13", "31", "73"],
  },
  {
    id: "lua",
    title: "Lửa / Cháy",
    keywords: ["lua", "chay", "ngon lua"],
    meaning:
      "Lửa cháy lớn không gây hại thường là điềm danh tiếng và may mắn. Lửa thiêu đồ vật của mình có thể là dấu hiệu thay đổi lớn sắp tới.",
    lottery: ["08", "80", "48"],
  },
  {
    id: "ca",
    title: "Cá",
    keywords: ["ca", "ca to", "danh ca", "bat ca"],
    meaning:
      "Cá là biểu tượng dư dả — 'cá' đồng âm với 'dư' (年年有餘). Bắt được cá to là điềm tài lộc đáng mong đợi, nhất là cá vàng hoặc cá chép.",
    lottery: ["18", "81", "39"],
  },
  {
    id: "nguoi-chet",
    title: "Người đã mất",
    keywords: ["nguoi chet", "nguoi da mat", "ong ba", "to tien"],
    meaning:
      "Mộng thấy người thân đã mất thường là tín hiệu họ đến phù hộ hoặc nhắc nhở việc gì. Nên chú ý nội dung lời nói trong mộng, đôi khi đó là điềm báo cho hành động sắp tới.",
    lottery: ["38", "83", "78"],
  },
  {
    id: "rong",
    title: "Rồng",
    keywords: ["rong", "rong vang", "rong bay"],
    meaning:
      "Rồng là biểu tượng quyền uy và may mắn lớn. Mộng thấy rồng bay là điềm thăng tiến công danh, đặc biệt với người làm quan hoặc lãnh đạo.",
    lottery: ["10", "01", "92"],
  },
  {
    id: "trang",
    title: "Mặt trăng",
    keywords: ["trang", "mat trang", "trang ron"],
    meaning:
      "Trăng tròn sáng là điềm gia đoàn viên, công việc viên mãn. Trăng khuyết hoặc bị mây che cho thấy giai đoạn cảm xúc bất ổn.",
    lottery: ["22", "44"],
  },
  {
    id: "may-bay",
    title: "Máy bay",
    keywords: ["may bay", "bay tren cao"],
    meaning:
      "Bay trên máy bay cho thấy bạn đang muốn vượt qua giới hạn hiện tại. Máy bay rơi là báo hiệu căng thẳng và áp lực, nên nghỉ ngơi.",
    lottery: ["47", "74"],
  },
  {
    id: "vang",
    title: "Vàng",
    keywords: ["vang", "tien vang", "nhat duoc vang"],
    meaning:
      "Nhặt được vàng là điềm tài lộc bất ngờ. Mất vàng cho thấy lo lắng về tài chính hoặc giá trị bản thân. Đeo vàng trong mộng = được công nhận.",
    lottery: ["07", "70", "37"],
  },
  {
    id: "ho",
    title: "Hổ",
    keywords: ["ho", "con ho", "ho can"],
    meaning:
      "Hổ tượng trưng cho quyền lực và sự dũng mãnh. Cưỡi hổ là điềm thăng tiến, hổ tấn công là cảnh báo có đối thủ mạnh hoặc bệnh tật.",
    lottery: ["27", "72"],
  },
  {
    id: "rua",
    title: "Rùa",
    keywords: ["rua", "con rua"],
    meaning:
      "Rùa là biểu tượng trường thọ và sự bền vững. Mộng thấy rùa thường báo hiệu sức khoẻ tốt, công việc ổn định lâu dài.",
    lottery: ["77"],
  },
  {
    id: "cuoi",
    title: "Đám cưới",
    keywords: ["cuoi", "dam cuoi", "le cuoi"],
    meaning:
      "Đám cưới trong mộng không hẳn là chuyện hôn nhân — thường là sự kết hợp hai phần khác biệt trong tâm trí bạn (lý trí và cảm xúc, tham vọng và gia đình...).",
    lottery: ["02", "20", "60"],
  },
  {
    id: "tre-em",
    title: "Trẻ em / Em bé",
    keywords: ["tre em", "em be", "tre con", "be"],
    meaning:
      "Em bé tượng trưng cho khởi đầu mới — dự án, mối quan hệ, ý tưởng. Bế em bé khoẻ mạnh là điềm tốt; em bé khóc là báo hiệu cần chăm sóc bản thân hơn.",
    lottery: ["11", "33"],
  },
  {
    id: "mau",
    title: "Máu",
    keywords: ["mau", "chay mau", "vet mau"],
    meaning:
      "Máu thường gây sợ trong mộng nhưng phần lớn lại là điềm tài lộc trong văn hoá Việt. Chảy máu nhiều có thể là cảnh báo sức khoẻ nên đi kiểm tra.",
    lottery: ["49", "94"],
  },
  {
    id: "den",
    title: "Đền chùa",
    keywords: ["den", "chua", "mieu", "thay phat"],
    meaning:
      "Mộng thấy chùa miếu là dấu hiệu tâm thức đang tìm sự bình an. Có thể là gợi ý đi cầu an, làm việc thiện hoặc đơn giản là nghỉ ngơi tinh thần.",
    lottery: ["88", "98"],
  },
  {
    id: "nha",
    title: "Nhà",
    keywords: ["nha", "ngoi nha", "xay nha", "nha sap"],
    meaning:
      "Nhà tượng trưng cho bản thân và tâm hồn. Xây nhà = xây dựng cuộc đời mới. Nhà sập = lo lắng về nền tảng cuộc sống. Nhà mới = giai đoạn chuyển mình.",
    lottery: ["52", "25"],
  },
  {
    id: "xe",
    title: "Xe / Tai nạn xe",
    keywords: ["xe", "lai xe", "tai nan xe", "xe hong"],
    meaning:
      "Xe đại diện cho hướng đi cuộc sống và sự kiểm soát. Tai nạn xe trong mộng cho thấy bạn cảm giác mất kiểm soát ở mảng nào đó — cần chậm lại.",
    lottery: ["64", "46"],
  },
];

function normalize(s: string): string {
  return s
    .normalize("NFD")
    .replace(/[\u0300-\u036f]/g, "")
    .replace(/đ/gi, "d")
    .toLowerCase()
    .replace(/[^a-z\s]/g, " ")
    .trim();
}

export function searchDreams(query: string): DreamEntry[] {
  const q = normalize(query);
  if (!q) return [];
  const tokens = q.split(/\s+/).filter(Boolean);
  return DREAMS.filter((entry) =>
    entry.keywords.some((kw) => tokens.some((t) => kw.includes(t) || t.includes(kw)))
  ).slice(0, 8);
}
