#!/usr/bin/env python3
"""
Test for task-148.1: cron 완료 알림 중복 보고 제거

Tests that team_prompts.py uses atomic file creation (open(path,'x'))
instead of check-then-act pattern to prevent duplicate reports.
"""

import pytest
import sys
from pathlib import Path

# Add workspace to path
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
from prompts.team_prompts import _build_direct_prompt, _build_glm_prompt, TEAM_INFO


class TestAtomicDuplicatePrevention:
    """Test atomic duplicate prevention in team prompts."""

    def test_direct_prompt_uses_atomic_create(self):
        """_build_direct_prompt should use open(path,'x') pattern."""
        prompt = _build_direct_prompt(
            team=TEAM_INFO["dev1-team"],
            team_id="dev1-team",
            task_id="task-test-148.1",
            task_file_path="/home/jay/workspace/memory/tasks/task-test-148.1.md",
            level="normal",
            timer_start="timer start",
            timer_end="timer end",
            report_path="/home/jay/workspace/memory/reports/task-test-148.1.md",
        )

        # Check for atomic create pattern
        assert "open(str(p),'x')" in prompt, "Should use open(path,'x') for atomic creation"
        assert "proceed" in prompt, "Should check for 'proceed' output"
        assert "FileExistsError" in prompt, "Should handle FileExistsError"

    def test_glm_prompt_uses_atomic_create(self):
        """_build_glm_prompt should use open(path,'x') pattern."""
        prompt = _build_glm_prompt(
            team=TEAM_INFO["dev3-team"],
            team_id="dev3-team",
            task_id="task-test-148.2",
            task_desc="Test task",
            level="normal",
            timer_start="timer start",
            timer_end="timer end",
            report_path="/home/jay/workspace/memory/reports/task-test-148.2.md",
        )

        # Check for atomic create pattern
        assert "open(str(p),'x')" in prompt, "Should use open(path,'x') for atomic creation"
        assert "proceed" in prompt, "Should check for 'proceed' output"
        assert "FileExistsError" in prompt, "Should handle FileExistsError"

    def test_direct_prompt_removes_old_check_pattern(self):
        """_build_direct_prompt should NOT have old check-then-act pattern."""
        prompt = _build_direct_prompt(
            team=TEAM_INFO["dev1-team"],
            team_id="dev1-team",
            task_id="task-test-148.3",
            task_file_path="/home/jay/workspace/memory/tasks/task-test-148.3.md",
            level="normal",
            timer_start="timer start",
            timer_end="timer end",
            report_path="/home/jay/workspace/memory/reports/task-test-148.3.md",
        )

        # Old pattern should NOT be present
        assert "이미 존재하는지 확인하라" not in prompt, "Should remove old check pattern"
        assert "존재하면 이미 처리된 건이니 스킵하라" not in prompt, "Should remove old skip pattern"
        assert "rename하라" not in prompt, "Should remove old rename pattern"

    def test_glm_prompt_removes_old_check_pattern(self):
        """_build_glm_prompt should NOT have old check-then-act pattern."""
        prompt = _build_glm_prompt(
            team=TEAM_INFO["dev3-team"],
            team_id="dev3-team",
            task_id="task-test-148.4",
            task_desc="Test task",
            level="normal",
            timer_start="timer start",
            timer_end="timer end",
            report_path="/home/jay/workspace/memory/reports/task-test-148.4.md",
        )

        # Old pattern should NOT be present
        assert "이미 존재하는지 확인하라" not in prompt, "Should remove old check pattern"
        assert "존재하면 이미 처리된 건이니 스킵하라" not in prompt, "Should remove old skip pattern"
        assert "rename하라" not in prompt, "Should remove old rename pattern"

    def test_direct_prompt_includes_mkdir(self):
        """_build_direct_prompt should include parent directory creation."""
        prompt = _build_direct_prompt(
            team=TEAM_INFO["dev1-team"],
            team_id="dev1-team",
            task_id="task-test-148.5",
            task_file_path="/home/jay/workspace/memory/tasks/task-test-148.5.md",
            level="normal",
            timer_start="timer start",
            timer_end="timer end",
            report_path="/home/jay/workspace/memory/reports/task-test-148.5.md",
        )

        # Should include mkdir for parent directory
        assert "mkdir(parents=True,exist_ok=True)" in prompt, "Should create parent directories"

    def test_glm_prompt_includes_mkdir(self):
        """_build_glm_prompt should include parent directory creation."""
        prompt = _build_glm_prompt(
            team=TEAM_INFO["dev3-team"],
            team_id="dev3-team",
            task_id="task-test-148.6",
            task_desc="Test task",
            level="normal",
            timer_start="timer start",
            timer_end="timer end",
            report_path="/home/jay/workspace/memory/reports/task-test-148.6.md",
        )

        # Should include mkdir for parent directory
        assert "mkdir(parents=True,exist_ok=True)" in prompt, "Should create parent directories"

    def test_direct_prompt_done_clear_extension(self):
        """_build_direct_prompt should use .done.clear extension."""
        prompt = _build_direct_prompt(
            team=TEAM_INFO["dev1-team"],
            team_id="dev1-team",
            task_id="task-test-148.7",
            task_file_path="/home/jay/workspace/memory/tasks/task-test-148.7.md",
            level="normal",
            timer_start="timer start",
            timer_end="timer end",
            report_path="/home/jay/workspace/memory/reports/task-test-148.7.md",
        )

        # Should use .done.clear extension
        assert ".done.clear" in prompt, "Should use .done.clear extension"

    def test_glm_prompt_done_clear_extension(self):
        """_build_glm_prompt should use .done.clear extension."""
        prompt = _build_glm_prompt(
            team=TEAM_INFO["dev3-team"],
            team_id="dev3-team",
            task_id="task-test-148.8",
            task_desc="Test task",
            level="normal",
            timer_start="timer start",
            timer_end="timer end",
            report_path="/home/jay/workspace/memory/reports/task-test-148.8.md",
        )

        # Should use .done.clear extension
        assert ".done.clear" in prompt, "Should use .done.clear extension"


if __name__ == "__main__":
    pytest.main([__file__, "-v"])
