"""dispatch.py의 agent-meeting 체크 함수 테스트 (task-2082)."""
import sys
from pathlib import Path

import pytest

# dispatch.py의 모듈 경로 설정
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))


@pytest.fixture(autouse=True)
def mock_workspace(tmp_path, monkeypatch):
    """WORKSPACE를 tmp_path로 모킹"""
    import dispatch
    monkeypatch.setattr(dispatch, "WORKSPACE", tmp_path)
    # meetings 디렉토리 생성
    (tmp_path / "memory" / "meetings").mkdir(parents=True, exist_ok=True)
    return tmp_path


class TestCheckAgentMeeting:
    """_check_agent_meeting 테스트"""

    def test_lv4_no_meeting_file_returns_warning(self, mock_workspace):
        """시나리오 1: --level critical + Lv.4 + 미팅 파일 없음 → WARNING"""
        from dispatch import _check_agent_meeting
        result = _check_agent_meeting("task-9999", "# task-9999: Lv.4 테스트\n## 레벨\n- critical", "critical")
        assert result is not None
        assert "Agent 미팅 결과 파일이 없습니다" in result
        assert "--skip-meeting" in result

    def test_skip_meeting_returns_none(self, mock_workspace):
        """시나리오 2: --skip-meeting 사용 시 WARNING 없이 통과"""
        from dispatch import _check_agent_meeting
        result = _check_agent_meeting("task-9999", "Lv.4 작업", "critical", skip_meeting=True)
        assert result is None

    def test_meeting_file_with_unanimous_passes(self, mock_workspace):
        """시나리오 3: 미팅 파일 있고 만장일치 포함 → 정상 통과"""
        from dispatch import _check_agent_meeting
        meeting_file = mock_workspace / "memory" / "meetings" / "agent-meeting-task-9999.md"
        meeting_file.write_text("# 미팅 결과\n결론: 만장일치 합의\n", encoding="utf-8")
        result = _check_agent_meeting("task-9999", "# Lv.4 테스트", "critical")
        assert result is None

    def test_lv1_dispatch_no_check(self, mock_workspace):
        """시나리오 4: Lv.1-2 dispatch에는 영향 없음"""
        from dispatch import _check_agent_meeting
        result = _check_agent_meeting("task-9999", "Lv.4 작업", "normal")
        assert result is None

    def test_meeting_file_without_unanimous_returns_warning(self, mock_workspace):
        """시나리오 5: 미팅 파일 있지만 만장일치 키워드 없음 → WARNING"""
        from dispatch import _check_agent_meeting
        meeting_file = mock_workspace / "memory" / "meetings" / "agent-meeting-task-9999.md"
        meeting_file.write_text("# 미팅 결과\n결론: 다수결 합의\n", encoding="utf-8")
        result = _check_agent_meeting("task-9999", "# Lv.4 테스트", "critical")
        assert result is not None
        assert "만장일치 합의가 확인되지 않습니다" in result

    def test_meeting_file_with_negative_unanimous_returns_warning(self, mock_workspace):
        """시나리오 6: 미팅 파일에 '만장일치 실패' → WARNING"""
        from dispatch import _check_agent_meeting
        meeting_file = mock_workspace / "memory" / "meetings" / "agent-meeting-task-9999.md"
        meeting_file.write_text("# 미팅 결과\n결론: 만장일치 실패\n", encoding="utf-8")
        result = _check_agent_meeting("task-9999", "# Lv.4 테스트", "critical")
        assert result is not None

    def test_no_lv4_pattern_no_check(self, mock_workspace):
        """시나리오 7: level=critical이지만 task_desc에 Lv.4 패턴 없음 → 체크 안함"""
        from dispatch import _check_agent_meeting
        result = _check_agent_meeting("task-9999", "# Lv.3 작업", "critical")
        assert result is None
