"""
test_system_docs_section.py

prompts/team_prompts.py의 _build_system_docs_section() 단위 테스트
(카마소츠/개발7팀 작성, task-2179)

테스트 항목:
- None project_id → 빈 문자열 반환
- {project_id}-system/plan.md 존재 시 system suffix 경로 반환
- {project_id}/plan.md 존재 시 (suffix 없음) 해당 경로 반환
- 존재하지 않는 project_id → 빈 문자열 반환
- {project_id}-system 과 {project_id} 둘 다 존재 시 -system 우선
"""

import sys
from pathlib import Path

import pytest

# workspace를 sys.path에 추가하여 prompts 패키지 임포트 가능하게 설정
_WORKSPACE = Path("/home/jay/workspace")
if str(_WORKSPACE) not in sys.path:
    sys.path.insert(0, str(_WORKSPACE))

from prompts.team_prompts import _build_system_docs_section  # noqa: E402


# ---------------------------------------------------------------------------
# helpers
# ---------------------------------------------------------------------------

def _make_plan(base: Path, folder: str) -> None:
    """base/memory/plans/{folder}/plan.md 를 생성한다."""
    plan_dir = base / "memory" / "plans" / folder
    plan_dir.mkdir(parents=True, exist_ok=True)
    (plan_dir / "plan.md").write_text("# plan", encoding="utf-8")


# ---------------------------------------------------------------------------
# 테스트 케이스
# ---------------------------------------------------------------------------


def test_none_project_id():
    """project_id가 None이면 빈 문자열을 반환해야 한다."""
    result = _build_system_docs_section(None)
    assert result == ""


def test_existing_project_with_system_suffix(tmp_path, monkeypatch):
    """{project_id}-system/plan.md 가 있을 때 해당 경로를 포함한 섹션을 반환한다."""
    project_id = "myproj"
    _make_plan(tmp_path, f"{project_id}-system")

    monkeypatch.setenv("WORKSPACE_ROOT", str(tmp_path))
    import prompts.team_prompts as tp
    monkeypatch.setattr(tp, "WORKSPACE_ROOT", str(tmp_path))

    result = _build_system_docs_section(project_id)

    assert result != ""
    assert f"memory/plans/{project_id}-system" in result
    assert "plan.md" in result
    assert "context-notes.md" in result
    assert "checklist.md" in result


def test_existing_project_without_system_suffix(tmp_path, monkeypatch):
    """{project_id}/plan.md 만 있을 때 (system suffix 없음) 해당 경로를 반환한다."""
    project_id = "myproj"
    _make_plan(tmp_path, project_id)

    monkeypatch.setenv("WORKSPACE_ROOT", str(tmp_path))
    import prompts.team_prompts as tp
    monkeypatch.setattr(tp, "WORKSPACE_ROOT", str(tmp_path))

    result = _build_system_docs_section(project_id)

    assert result != ""
    assert f"memory/plans/{project_id}" in result
    # system suffix 경로가 포함되지 않아야 한다
    assert f"memory/plans/{project_id}-system" not in result


def test_nonexistent_project(tmp_path, monkeypatch):
    """plan.md 가 전혀 없는 project_id 는 빈 문자열을 반환해야 한다."""
    monkeypatch.setenv("WORKSPACE_ROOT", str(tmp_path))
    import prompts.team_prompts as tp
    monkeypatch.setattr(tp, "WORKSPACE_ROOT", str(tmp_path))

    result = _build_system_docs_section("no-such-project")

    assert result == ""


def test_system_suffix_priority(tmp_path, monkeypatch):
    """{project_id}-system 과 {project_id} 둘 다 존재하면 -system 경로가 우선이다."""
    project_id = "myproj"
    _make_plan(tmp_path, f"{project_id}-system")
    _make_plan(tmp_path, project_id)

    monkeypatch.setenv("WORKSPACE_ROOT", str(tmp_path))
    import prompts.team_prompts as tp
    monkeypatch.setattr(tp, "WORKSPACE_ROOT", str(tmp_path))

    result = _build_system_docs_section(project_id)

    assert result != ""
    assert f"memory/plans/{project_id}-system" in result
