# -*- coding: utf-8 -*-
"""区域映射配置 — ETL 和后端共用。

将 dim_table.site_table_area_name（物理区域名称）映射到标准 area_code。

区域编码体系（9 个值）：
- 7 个具体区域：hallA / hallB / hallC / vip / snooker / mahjong / ktv
- hall = 台球大厅（hallA + hallB + hallC）
- all  = 所有区域之和
"""
from __future__ import annotations

# ── 核心映射：area_code → 物理区域名称列表 ──────────────────────────
AREA_LABEL_MAP: dict[str, list[str]] = {
    "hallA":   ["A区"],
    "hallB":   ["B区"],
    "hallC":   ["C区", "TV台", "美洲豹赛台"],
    "vip":     ["VIP包厢"],
    "snooker": ["斯诺克区"],
    "mahjong": ["麻将房", "M7", "M8", "666", "发财"],
    "ktv":     ["K包", "k包活动区", "幸会158"],
}

# ── 派生常量 ────────────────────────────────────────────────────────
SPECIFIC_AREA_CODES: list[str] = list(AREA_LABEL_MAP.keys())
"""7 个具体区域编码（不含 all / hall）。"""

ALL_AREA_CODES: list[str] = ["all", "hall"] + SPECIFIC_AREA_CODES
"""全部 9 个区域编码。"""

# ── 反向映射：物理区域名称 → area_code ──────────────────────────────
_REVERSE_MAP: dict[str, str] = {
    label: code
    for code, labels in AREA_LABEL_MAP.items()
    for label in labels
}


# ── 公开函数 ────────────────────────────────────────────────────────
def resolve_area_code(area_name: str | None) -> str | None:
    """输入 site_table_area_name，返回对应的 area_code。

    未匹配返回 None，由调用方（ETL）决定是否记录警告。
    """
    if area_name is None:
        return None
    return _REVERSE_MAP.get(area_name)


def get_area_labels(area_code: str) -> list[str] | None:
    """输入 area_code，返回对应的物理区域名称列表。

    all / hall 不对应具体物理区域，返回 None。
    未知 area_code 同样返回 None。
    """
    return AREA_LABEL_MAP.get(area_code)
