"""시간대 + 휴장일 기반 모드 판정 (idle 감지 생략 — 박재오 결정 2026-05-22).

trading: 비휴장 평일 07:00–16:30 (장중) → queue:paused SET
free:    그 외 (장 전/후, 주말, 휴장) → queue:paused DEL
"""
from __future__ import annotations

import datetime as dt
import logging
import os
from typing import Set
from zoneinfo import ZoneInfo

import httpx

logger = logging.getLogger(__name__)

KST = ZoneInfo("Asia/Seoul")
STOCK_BASE_URL = os.getenv("STOCK_BASE_URL", "http://192.168.45.54:18500")

# 트레이딩 윈도우 (HH:MM, KST). .env로 조정 가능.
TRADING_START = os.getenv("TRADING_START", "07:00")
TRADING_END = os.getenv("TRADING_END", "16:30")


def _parse_hhmm(s: str) -> dt.time:
    hh, mm = s.split(":")
    return dt.time(int(hh), int(mm))


def current_mode(now: dt.datetime, holidays: Set[str]) -> str:
    """now(KST aware) + holidays(ISO date set) → 'trading' | 'free'."""
    # 주말 (토=5, 일=6)
    if now.weekday() >= 5:
        return "free"
    # 휴장일
    if now.date().isoformat() in holidays:
        return "free"
    # 트레이딩 윈도우 [start, end)
    start = _parse_hhmm(TRADING_START)
    end = _parse_hhmm(TRADING_END)
    t = now.timetz().replace(tzinfo=None)
    if start <= t < end:
        return "trading"
    return "free"


def fetch_holidays() -> Set[str]:
    """NAS stock /api/stock/holidays 조회. 실패 시 빈 set (안전 — free로 판정)."""
    try:
        r = httpx.get(f"{STOCK_BASE_URL}/api/stock/holidays", timeout=10.0)
        if r.status_code == 200:
            return set(r.json().get("holidays", []))
        logger.warning("holidays fetch returned %d", r.status_code)
    except Exception:
        logger.exception("holidays fetch 실패")
    return set()
