"""P2-5: 모델 매핑 테이블 단위 테스트."""

import logging
import os
import sys
from datetime import datetime, timedelta

sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))

import pytest


def test_model_map_keys():
    """MODEL_MAP에 필수 역할이 존재하는지 확인."""
    from prompts.team_prompts import MODEL_MAP

    required_roles = {"팀장", "백엔드", "프론트엔드", "UX/UI", "테스터", "QC", "git", "보안리뷰"}
    actual_roles = {k for k in MODEL_MAP.keys() if not k.startswith("_")}
    assert required_roles == actual_roles


def test_model_map_has_updated():
    """MODEL_MAP에 _updated 메타키가 존재하는지 확인."""
    from prompts.team_prompts import MODEL_MAP

    assert "_updated" in MODEL_MAP
    assert isinstance(MODEL_MAP["_updated"], str)


def test_model_map_default_models():
    """각 역할에 default 모델이 정의되어 있는지 확인."""
    from prompts.team_prompts import MODEL_MAP

    for role, config in MODEL_MAP.items():
        if role.startswith("_"):
            continue
        assert "default" in config, f"{role}에 default 모델 없음"


def test_build_model_guide_contains_all_roles():
    """_build_model_guide() 출력에 모든 역할이 포함되는지 확인."""
    from prompts.team_prompts import MODEL_MAP, _build_model_guide

    guide = _build_model_guide()
    for role in MODEL_MAP:
        if role.startswith("_"):
            assert role not in guide, f"메타키 {role}이 출력에 노출됨"
        else:
            assert role in guide, f"역할 {role}이 출력에 없음"


def test_build_model_guide_no_metakeys():
    """메타키(_updated 등)가 출력 텍스트에 노출되지 않는지 확인."""
    from prompts.team_prompts import _build_model_guide

    guide = _build_model_guide()
    assert "_updated" not in guide


def test_staleness_warning_over_7_days(caplog):
    """staleness 7일 초과 시 경고 메시지 발생 확인."""
    from prompts.team_prompts import MODEL_MAP, _build_model_guide

    original = MODEL_MAP["_updated"]
    old_date = (datetime.now() - timedelta(days=30)).strftime("%Y-%m-%d")
    MODEL_MAP["_updated"] = old_date

    with caplog.at_level(logging.WARNING):
        _build_model_guide()

    MODEL_MAP["_updated"] = original

    assert any("MODEL_MAP" in record.message and "경과" in record.message for record in caplog.records)


def test_staleness_no_warning_within_7_days(caplog):
    """staleness 7일 이하 시 경고 없음 확인."""
    from prompts.team_prompts import MODEL_MAP, _build_model_guide

    original = MODEL_MAP["_updated"]
    MODEL_MAP["_updated"] = datetime.now().strftime("%Y-%m-%d")

    with caplog.at_level(logging.WARNING):
        _build_model_guide()

    MODEL_MAP["_updated"] = original

    model_map_warnings = [
        r for r in caplog.records if "MODEL_MAP" in r.message and "경과" in r.message
    ]
    assert len(model_map_warnings) == 0


def test_feature_flag_off_keeps_existing():
    """feature_flag OFF 시 기존 _build_cowork_section() 동작 유지 확인."""
    from prompts.team_prompts import _build_cowork_section

    result = _build_cowork_section("dev1-team")
    # 기존 하드코딩된 가이드 포함 (flag OFF이므로)
    assert "모델 선택 가이드" in result or "모델 가이드" in result
