"""Boundary tests for natural Korean nutrition onboarding answers."""

from __future__ import annotations

import pytest

from gateway.platforms.telegram_nutrition_onboarding_copy import parse_answer


@pytest.mark.parametrize(
    ("field", "text", "expected"),
    (
        ("height_cm", "180cm", 180.0),
        ("height_cm", "180 cm", 180.0),
        ("weight_kg", "80kg", 80.0),
        ("target_weight_kg", "75 kg", 75.0),
        ("meal_count", "4끼", 4),
        ("meal_count", "하루 4끼", 4),
        ("meal_count", "네 끼", 4),
    ),
)
def test_parse_answer_normalizes_bounded_korean_scalar_forms(
    field: str,
    text: str,
    expected: object,
) -> None:
    assert parse_answer(field, text) == expected


def test_parse_answer_normalizes_exact_activity_clarification_prefix() -> None:
    clarification = (
        "활동 수준: 보통. 주 3회, 회당 60분 정도의 중간 강도 근력운동을 "
        "희망합니다. 평소 걷기·이동은 하루 약 6,000~8,000보 수준입니다."
    )

    assert parse_answer("activity_category", clarification) == "moderate"
    assert parse_answer("activity_category", "보통") == "moderate"
    assert (
        parse_answer("activity_category", "보통 운동을 자주 합니다")
        == "보통 운동을 자주 합니다"
    )
    unrecognized = "활동 수준: 꽤 활동적. 주 3회 운동합니다."
    assert parse_answer("activity_category", unrecognized) == unrecognized


def test_parse_answer_rejects_ambiguous_meal_count() -> None:
    with pytest.raises(ValueError):
        parse_answer("meal_count", "대충 네다섯 끼")
