from __future__ import annotations

from datetime import date

from app.services.application_fact_resolver import (
    ApplicationFactResolver,
    resolve_application_facts,
)


def test_application_fact_resolver_extracts_travel_application_fields() -> None:
    facts = resolve_application_facts(
        "明天去上海出差3天，辅助国网仿生产环境部署，高铁往返",
        "expense_application",
        date(2026, 6, 23),
    )

    assert facts["expense_type"] == "travel"
    assert facts["time_range"] == "2026-06-24"
    assert facts["location"] == "上海"
    assert facts["reason"] == "辅助国网仿生产环境部署，高铁往返"
    assert facts["transport_mode"] == "train"


def test_application_fact_resolver_drops_transport_prompt_from_application_reason() -> None:
    facts = resolve_application_facts(
        "2026-02-20 至 2026-02-23，去上海出差，辅助国网仿生产服务器部署，交通火车，直接提交",
        "expense_application",
        date(2026, 6, 24),
    )

    assert facts["reason"] == "辅助国网仿生产服务器部署"
    assert facts["transport_mode"] == "train"


def test_application_fact_resolver_preserves_reimbursement_transport_semantics() -> None:
    facts = resolve_application_facts(
        "报销昨天去北京客户现场沟通产生的出租车费用",
        "reimbursement",
        date(2026, 6, 23),
    )

    assert facts["expense_type"] == "transport"
    assert facts["time_range"] == "2026-06-22"
    assert facts["location"] == "北京"
    assert facts["reason"] == "去北京客户现场沟通产生的出租车费用"
    assert facts["transport_mode"] == "taxi"


def test_application_fact_resolver_keeps_static_wrapper_api() -> None:
    assert ApplicationFactResolver.infer_expense_type("打车去客户现场", "expense_application") == "travel"
    assert ApplicationFactResolver.infer_expense_type("打车去客户现场", "reimbursement") == "transport"
    assert ApplicationFactResolver.extract_time_range("2026-07-01 去深圳", date(2026, 6, 23)) == "2026-07-01"
