import pytest

from tests._fake_llm import FakeLLMProvider

CTX = {
    "projects": [
        {"id": "life-trip", "name": "여행 — 한국", "folder_id": "life"},
        {"id": "life-fam", "name": "가족", "folder_id": "life"},
        {"id": "onb", "name": "온보딩 리디자인", "folder_id": "work"},
    ]
}

GOLDEN = [
    # (raw, type, sphere, proj_label 포함어, extra 포함어)
    ("다음 주에 한국 놀러가는 비행기 티켓 사기", "task", "life", "여행", "가격"),
    ("수요일 11시 자전거 수리 맡기기", "event", "life", "캘린더", ""),
    ("엄마 생신 선물 미리 알아보기", "task", "life", "가족", ""),
    ("온보딩 환영 화면에 짧은 애니메이션 넣으면 어떨까", "idea", "work", "온보딩", ""),
]


@pytest.mark.parametrize("raw,typ,sphere,proj_kw,extra_kw", GOLDEN)
def test_golden(raw, typ, sphere, proj_kw, extra_kw):
    c = FakeLLMProvider().classify_capture(raw, CTX)
    assert c.type == typ, f"{raw} → type {c.type}"
    assert c.sphere == sphere, f"{raw} → sphere {c.sphere}"
    assert proj_kw in c.proj_label, f"{raw} → proj_label {c.proj_label}"
    if extra_kw:
        assert extra_kw in c.extra
    assert c.reason  # 한국어 reason 비어있지 않음
