from __future__ import annotations

import json
from datetime import datetime
from pathlib import Path
from zoneinfo import ZoneInfo

import checkin_cli
from pydantic import JsonValue, TypeAdapter

from tests.multi_customer_testkit import admission_policy
from tests.test_customer_coaching_domain import _registry_payload

_CUSTOMERS = TypeAdapter(list[dict[str, JsonValue]])
_KST = ZoneInfo("Asia/Seoul")


def test_schedule_fans_out_to_each_due_enabled_customer(
    tmp_path: Path,
) -> None:
    payload = _registry_payload(second_enabled=True)
    customers = _CUSTOMERS.validate_python(payload["customers"])
    for customer in customers:
        customer["schedule"] = {
            "daily_time": "08:00",
            "weekly_weekday": 0,
            "monthly_day": 1,
        }
    payload["customers"] = customers
    payload["admission_policy"] = admission_policy(2)
    path = tmp_path / "registry.json"
    path.write_text(json.dumps(payload), encoding="utf-8")
    registry = checkin_cli.load_customer_registry(path, tmp_path)

    tasks = checkin_cli.build_due_customer_tasks(
        registry,
        datetime(2026, 7, 21, 8, 17, tzinfo=_KST),
    )

    assert {
        (task.customer_key, task.kind) for task in tasks if task.kind == "daily"
    } == {
        ("client_001", "daily"),
        ("client_002", "daily"),
    }
