"""
task-1124.1: _enrich_bot_activity()의 논리적 팀(marketing, consulting) 지원 테스트

TDD RED 단계: 수정 전에 실행하면 실패해야 함
"""
import sys
from datetime import datetime
from pathlib import Path

sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent / "dashboard"))

def _make_loader_with_tasks(tasks: dict) -> "DataLoader":  # type: ignore[name-defined]
    """테스트용 DataLoader 인스턴스 생성 (실제 파일 없이 in-memory 데이터 주입)"""
    from server import DataLoader  # pyright: ignore[reportMissingImports]

    loader = DataLoader(Path("/tmp/fake-workspace"))
    loader.task_data = {"tasks": tasks}
    loader.bot_activity_data = {
        "bots": {
            "marketing": {"status": "idle"},
            "consulting": {"status": "idle"},
            "design": {"status": "idle"},
            "publishing": {"status": "idle"},
            "dev1": {"status": "idle"},
        }
    }
    return loader


def _running_task(team_id: str) -> dict:
    """stale하지 않은 running 태스크 생성"""
    return {
        "status": "running",
        "team_id": team_id,
        "description": f"{team_id} 테스트 작업",
        "start_time": datetime.now().isoformat(),
    }


# ── marketing 팀 테스트 ──────────────────────────────────────────────────────

def test_marketing_has_running_tasks_true_when_running():
    """marketing 팀에 running task가 있으면 has_running_tasks=True 반환"""
    loader = _make_loader_with_tasks({"task-m1": _running_task("marketing")})
    result = loader._enrich_bot_activity()
    bots = result.get("bots", {})
    assert "marketing" in bots, "marketing 봇이 결과에 없음"
    assert bots["marketing"]["has_running_tasks"] is True, (
        "marketing 팀에 running task가 있는데 has_running_tasks=False"
    )


def test_marketing_has_running_tasks_false_when_no_tasks():
    """marketing 팀에 running task가 없으면 has_running_tasks=False 반환"""
    loader = _make_loader_with_tasks({})  # 태스크 없음
    result = loader._enrich_bot_activity()
    bots = result.get("bots", {})
    assert "marketing" in bots, "marketing 봇이 결과에 없음"
    assert bots["marketing"]["has_running_tasks"] is False, (
        "marketing 팀에 running task가 없는데 has_running_tasks=True"
    )


# ── consulting 팀 테스트 ─────────────────────────────────────────────────────

def test_consulting_has_running_tasks_true_when_running():
    """consulting 팀에 running task가 있으면 has_running_tasks=True 반환"""
    loader = _make_loader_with_tasks({"task-c1": _running_task("consulting")})
    result = loader._enrich_bot_activity()
    bots = result.get("bots", {})
    assert "consulting" in bots, "consulting 봇이 결과에 없음"
    assert bots["consulting"]["has_running_tasks"] is True, (
        "consulting 팀에 running task가 있는데 has_running_tasks=False"
    )


def test_consulting_has_running_tasks_false_when_no_tasks():
    """consulting 팀에 running task가 없으면 has_running_tasks=False 반환"""
    loader = _make_loader_with_tasks({})
    result = loader._enrich_bot_activity()
    bots = result.get("bots", {})
    assert "consulting" in bots, "consulting 봇이 결과에 없음"
    assert bots["consulting"]["has_running_tasks"] is False, (
        "consulting 팀에 running task가 없는데 has_running_tasks=True"
    )


# ── 기존 팀 회귀 방지 테스트 ─────────────────────────────────────────────────

# ── design 팀 테스트 ──────────────────────────────────────────────────────

def test_design_has_running_tasks_true_when_running():
    """design 팀에 running task가 있으면 has_running_tasks=True 반환"""
    loader = _make_loader_with_tasks({"task-d1": _running_task("design")})
    result = loader._enrich_bot_activity()
    bots = result.get("bots", {})
    assert "design" in bots, "design 봇이 결과에 없음"
    assert bots["design"]["has_running_tasks"] is True, (
        "design 팀에 running task가 있는데 has_running_tasks=False"
    )


def test_design_has_running_tasks_false_when_no_tasks():
    """design 팀에 running task가 없으면 has_running_tasks=False 반환"""
    loader = _make_loader_with_tasks({})
    result = loader._enrich_bot_activity()
    bots = result.get("bots", {})
    assert "design" in bots, "design 봇이 결과에 없음"
    assert bots["design"]["has_running_tasks"] is False, (
        "design 팀에 running task가 없는데 has_running_tasks=True"
    )


# ── publishing 팀 테스트 ──────────────────────────────────────────────────

def test_publishing_has_running_tasks_true_when_running():
    """publishing 팀에 running task가 있으면 has_running_tasks=True 반환"""
    loader = _make_loader_with_tasks({"task-p1": _running_task("publishing")})
    result = loader._enrich_bot_activity()
    bots = result.get("bots", {})
    assert "publishing" in bots, "publishing 봇이 결과에 없음"
    assert bots["publishing"]["has_running_tasks"] is True, (
        "publishing 팀에 running task가 있는데 has_running_tasks=False"
    )


def test_publishing_has_running_tasks_false_when_no_tasks():
    """publishing 팀에 running task가 없으면 has_running_tasks=False 반환"""
    loader = _make_loader_with_tasks({})
    result = loader._enrich_bot_activity()
    bots = result.get("bots", {})
    assert "publishing" in bots, "publishing 봇이 결과에 없음"
    assert bots["publishing"]["has_running_tasks"] is False, (
        "publishing 팀에 running task가 없는데 has_running_tasks=True"
    )


# ── 기존 팀 회귀 방지 테스트 ─────────────────────────────────────────────────

def test_existing_dev1_team_still_works():
    """기존 dev1-team 매핑이 깨지지 않았는지 확인"""
    loader = _make_loader_with_tasks({"task-d1": _running_task("dev1-team")})
    result = loader._enrich_bot_activity()
    bots = result.get("bots", {})
    assert "dev1" in bots, "dev1 봇이 결과에 없음"
    assert bots["dev1"]["has_running_tasks"] is True, (
        "dev1-team에 running task가 있는데 has_running_tasks=False"
    )
