# -*- coding: utf-8 -*-
"""美团城市字典(地级市)读取。

数据源:app/integrations/data/meituan_cities.json,由 tools/gen_meituan_cities.py 从
美团官方「城市字典」Excel 生成(359 个地级市:city_id / 城市名 / 省份)。
实测一个地级市 cityId 已覆盖其下辖县级市供给(徐州 → 邳州 / 新沂 / 睢宁 …),故无区县层级。

- ETL(scripts/pull_meituan_coupons.py)遍历 all_cities() 全量抓取入库。
- 读取侧将来「按城市过滤」时,也从这里取 city_id ↔ 城市名映射。
"""
from __future__ import annotations

import functools
import json
from pathlib import Path

_JSON = Path(__file__).resolve().parent / "data" / "meituan_cities.json"


@functools.lru_cache(maxsize=1)
def all_cities() -> list[dict]:
    """全部城市 [{city_id, name, province}, ...](359 个地级市)。"""
    return json.loads(_JSON.read_text(encoding="utf-8"))


@functools.lru_cache(maxsize=1)
def _by_id() -> dict[str, dict]:
    return {c["city_id"]: c for c in all_cities()}


def city_name(city_id: str) -> str | None:
    """city_id → 城市名(查不到返回 None)。"""
    c = _by_id().get(city_id)
    return c["name"] if c else None
