"""
constants.py — Single Source of Truth cho toàn bộ hằng số dùng chung.

QUY TẮC:
  - Hằng số viết HOA toàn bộ (UPPERCASE).
  - Đặt ngay dưới phần import.
  - Mọi file khác import từ đây, KHÔNG hardcode lại.
"""

import os

# ═══════════════════════════════════════════════════════════════
# DATABASE PATHS
# ═══════════════════════════════════════════════════════════════
_BACKEND_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
_PROJECT_ROOT = os.path.dirname(_BACKEND_DIR)  # D:\cnf\chatbot_canifa

SQLITE_DB_PATH: str = os.path.join(_BACKEND_DIR, "database", "canifa_ai_dump.sqlite")

# ═══════════════════════════════════════════════════════════════
# SQLITE TABLE NAMES (mapping schema.table → SQLite table name)
# ═══════════════════════════════════════════════════════════════
TABLE_OUTFIT_RULES = "pg__dashboard_canifa__chatbot_fashion_rules"
TABLE_FASHION_RULES = "pg__dashboard_canifa__chatbot_fashion_rules"
TABLE_OUTFIT_MATCHES = "pg__dashboard_canifa__ai_outfit_product_matches"
TABLE_PRODUCTS = "sr__test_db__magento_product_dimension_with_text_embedding"

# ═══════════════════════════════════════════════════════════════
# GENDER MAPPING (Vietnamese / English → DB key)
# ═══════════════════════════════════════════════════════════════
SQLITE_GENDER_MAP: dict[str, str] = {
    "nu": "women",
    "nam": "men",
    "be_gai": "girl",
    "be_trai": "boy",
    "unisex": "unisex",
}

# ═══════════════════════════════════════════════════════════════
# KID DETECTION KEYWORDS
# ═══════════════════════════════════════════════════════════════
KID_SAFE_KEYWORDS: list[str] = [
    "kid", "trẻ em", "bé trai", "bé gái", "be_gai", "be_trai", "tre_em",
]


def normalize_gender(gender: str) -> str:
    """Chuẩn hoá chuỗi gender về key nội bộ (nu/nam/be_gai/be_trai/unisex)."""
    g = (gender or "").lower().strip()
    if g in ("nu", "nữ", "women", "female", "woman"):
        return "nu"
    if g in ("nam", "men", "male", "man"):
        return "nam"
    if any(k in g for k in ["bé gái", "be_gai", "girl", "be gai"]):
        return "be_gai"
    if any(k in g for k in ["bé trai", "be_trai", "boy", "be trai"]):
        return "be_trai"
    return "unisex"
