"""Standardized cuisine type taxonomy and LLM remapping."""

from __future__ import annotations

# ── Canonical cuisine types ──
# Format: "대분류|소분류"
CUISINE_TYPES = [
    # 한식
    "한식|백반/한정식",
    "한식|국밥/해장국",
    "한식|찌개/전골/탕",
    "한식|삼겹살/돼지구이",
    "한식|소고기/한우구이",
    "한식|곱창/막창",
    "한식|닭/오리구이",
    "한식|족발/보쌈",
    "한식|회/횟집",
    "한식|해산물",
    "한식|분식",
    "한식|면",
    "한식|죽/죽집",
    "한식|순대/순대국",
    "한식|장어/민물",
    "한식|주점/포차",
    # 일식
    "일식|스시/오마카세",
    "일식|라멘",
    "일식|돈카츠",
    "일식|텐동/튀김",
    "일식|이자카야",
    "일식|야키니쿠",
    "일식|카레",
    "일식|소바/우동",
    # 중식
    "중식|중화요리",
    "중식|마라/훠궈",
    "중식|딤섬/만두",
    "중식|양꼬치",
    # 양식
    "양식|파스타/이탈리안",
    "양식|스테이크",
    "양식|햄버거",
    "양식|피자",
    "양식|프렌치",
    "양식|바베큐",
    "양식|브런치",
    "양식|비건/샐러드",
    # 아시아
    "아시아|베트남",
    "아시아|태국",
    "아시아|인도/중동",
    "아시아|동남아기타",
    # 기타
    "기타|치킨",
    "기타|카페/디저트",
    "기타|베이커리",
    "기타|뷔페",
    "기타|퓨전",
]

# For LLM prompt
CUISINE_LIST_TEXT = "\n".join(f"  - {c}" for c in CUISINE_TYPES)

_REMAP_PROMPT = """\
아래 식당들의 cuisine_type을 표준 분류로 매핑하세요.

표준 분류 목록 (반드시 이 중 하나를 선택):
{cuisine_types}

식당 목록:
{restaurants}

규칙:
- 모든 식당에 대해 빠짐없이 결과를 반환 (총 {count}개 모두 반환해야 함)
- 반드시 위 표준 분류 목록의 값을 그대로 복사하여 사용 (오타 금지)
- 식당 이름, 현재 분류, 메뉴를 종합적으로 고려
- JSON 배열만 반환, 설명 없음
- 형식: [{{"id": "식당ID", "cuisine_type": "한식|국밥/해장국"}}, ...]

JSON 배열:"""


def build_remap_prompt(restaurants: list[dict]) -> str:
    """Build a prompt for remapping cuisine types."""
    items = []
    for r in restaurants:
        items.append({
            "id": r["id"],
            "name": r["name"],
            "current_cuisine_type": r.get("cuisine_type"),
            "foods_mentioned": r.get("foods_mentioned"),
        })
    import json
    return _REMAP_PROMPT.format(
        cuisine_types=CUISINE_LIST_TEXT,
        restaurants=json.dumps(items, ensure_ascii=False),
        count=len(items),
    )


# Valid prefixes for loose validation
VALID_PREFIXES = ("한식|", "일식|", "중식|", "양식|", "아시아|", "기타|")
