"""task-1096.1: org-details dev*-team.json 구조 검증 테스트

dev1~4-team.json 파일이 올바른 구조로 생성되었는지 검증합니다.
"""

import json
import os
from pathlib import Path

import pytest

_WORKSPACE = Path(os.environ.get("WORKSPACE_ROOT", "/home/jay/workspace"))


@pytest.mark.skipif(
    not (_WORKSPACE / "memory/org-details/dev1-team.json").exists(),
    reason="org-details/dev*-team.json 파일이 존재하지 않음",
)
class TestDevTeamDetailFiles:
    """org-details dev*-team.json 파일 구조 검증."""

    @pytest.fixture
    def team_files(self) -> dict[str, Path]:
        """팀 설정 파일 경로."""
        base_path = _WORKSPACE / "memory/org-details"
        return {
            "dev1-team": base_path / "dev1-team.json",
            "dev2-team": base_path / "dev2-team.json",
            "dev3-team": base_path / "dev3-team.json",
            "dev4-team": base_path / "dev4-team.json",
        }

    def test_all_team_files_exist(self, team_files: dict[str, Path]) -> None:
        """모든 팀 설정 파일이 존재해야 함."""
        for team_name, filepath in team_files.items():
            assert filepath.exists(), f"{team_name} 파일 없음: {filepath}"

    def test_files_are_valid_json(self, team_files: dict[str, Path]) -> None:
        """모든 파일이 유효한 JSON이어야 함."""
        for team_name, filepath in team_files.items():
            try:
                with open(filepath, encoding="utf-8") as f:
                    json.load(f)
            except json.JSONDecodeError as e:
                pytest.fail(f"{team_name} JSON 파싱 실패: {e}")

    def test_has_required_fields(self, team_files: dict[str, Path]) -> None:
        """각 파일에 필수 필드가 있어야 함."""
        required_fields = [
            "team_id",
            "team_name",
            "extracted_from",
            "status",
            "type",
            "lead",
            "members_detail",
        ]
        for team_name, filepath in team_files.items():
            with open(filepath, encoding="utf-8") as f:
                data = json.load(f)
            for field in required_fields:
                assert field in data, f"{team_name}에 필수 필드 없음: {field}"

    def test_team_ids_match_filename(self, team_files: dict[str, Path]) -> None:
        """각 파일의 team_id가 파일명과 일치해야 함."""
        for team_name, filepath in team_files.items():
            with open(filepath, encoding="utf-8") as f:
                data = json.load(f)
            assert data["team_id"] == team_name, f"{team_name} 파일의 team_id가 파일명과 불일치: {data['team_id']}"

    def test_leads_are_correct(self, team_files: dict[str, Path]) -> None:
        """각 팀 리드의 id가 올바르게 설정되어야 함."""
        expected_leads = {
            "dev1-team": "hermes",
            "dev2-team": "odin",
            "dev3-team": "dagda",
            "dev4-team": "vishnu",
        }
        for team_name, filepath in team_files.items():
            with open(filepath, encoding="utf-8") as f:
                data = json.load(f)
            actual_lead_id = data["lead"]["id"]
            expected_lead_id = expected_leads[team_name]
            assert actual_lead_id == expected_lead_id, (
                f"{team_name}의 lead.id가 올바르지 않음: " f"expected={expected_lead_id}, actual={actual_lead_id}"
            )

    def test_members_detail_not_empty(self, team_files: dict[str, Path]) -> None:
        """members_detail에 최소 1개 이상의 멤버가 있어야 함."""
        for team_name, filepath in team_files.items():
            with open(filepath, encoding="utf-8") as f:
                data = json.load(f)
            members = data["members_detail"]
            assert len(members) >= 1, f"{team_name}의 members_detail이 비어있음"
