"""
test_report_parser.py

report_parser.py 머지 감지 기능 TDD 테스트 (토르 작성)

테스트 항목:
- parse_report(): merge_needed, merge_branch, merge_worktree 필드 추출
- summarize_oneline(): merge_needed=True 시 "| 🔀 머지 필요" 접미사
"""

import os
import sys
from pathlib import Path

# workspace를 sys.path에 추가
WORKSPACE = Path(os.environ.get("WORKSPACE_ROOT", "/home/jay/workspace"))
if str(WORKSPACE) not in sys.path:
    sys.path.insert(0, str(WORKSPACE))

from report_parser import parse_report, summarize_oneline  # pyright: ignore[reportMissingImports]

# ---------------------------------------------------------------------------
# 헬퍼: 보고서 md 파일 생성
# ---------------------------------------------------------------------------


def _make_report(tmp_path: Path, content: str, filename: str = "task-100.1.md") -> str:
    """임시 보고서 파일을 생성하고 경로 문자열을 반환한다."""
    p = tmp_path / filename
    p.write_text(content, encoding="utf-8")
    return str(p)


# ---------------------------------------------------------------------------
# 케이스 1: "merge 판단은 아누에게 위임" → merge_needed=True
# ---------------------------------------------------------------------------


def test_merge_needed_delegate_to_anu(tmp_path: Path):
    """보고서에 'merge 판단은 아누에게 위임' 포함 시 merge_needed=True"""
    content = """\
# task-100.1 작업 보고서

- **작업 ID**: task-100.1
- **팀**: dev2
- **작업 요약**: 기능 구현 완료
- **소요 시간**: 30분

## 머지 판단
merge 판단은 아누에게 위임합니다.

## 결과
- **총 테스트**: 5
- **통과**: 5
- **실패**: 0
- **발견 버그**: 0건
"""
    filepath = _make_report(tmp_path, content)
    result = parse_report(filepath)

    assert result["merge_needed"] is True


# ---------------------------------------------------------------------------
# 케이스 2: "머지 필요 없음" → merge_needed=False
# ---------------------------------------------------------------------------


def test_merge_not_needed(tmp_path: Path):
    """'머지 필요 없음' 포함 시 merge_needed=False (부정 표현)"""
    content = """\
# task-100.2 작업 보고서

- **작업 ID**: task-100.2
- **팀**: dev1
- **작업 요약**: 버그 수정 완료
- **소요 시간**: 15분

## 머지 판단
머지 필요 없음. 단독 브랜치에서 작업 완료.

## 결과
- **총 테스트**: 3
- **통과**: 3
- **실패**: 0
- **발견 버그**: 0건
"""
    filepath = _make_report(tmp_path, content)
    result = parse_report(filepath)

    assert result["merge_needed"] is False


# ---------------------------------------------------------------------------
# 케이스 3: 머지 관련 키워드 없음 → merge_needed=False
# ---------------------------------------------------------------------------


def test_no_merge_keywords(tmp_path: Path):
    """머지/merge 관련 키워드 전혀 없으면 merge_needed=False"""
    content = """\
# task-100.3 작업 보고서

- **작업 ID**: task-100.3
- **팀**: dev3
- **작업 요약**: 리팩토링 완료
- **소요 시간**: 1시간

## 작업 내용
코드 구조를 개선하였습니다.

## 결과
- **총 테스트**: 10
- **통과**: 10
- **실패**: 0
- **발견 버그**: 0건
"""
    filepath = _make_report(tmp_path, content)
    result = parse_report(filepath)

    assert result["merge_needed"] is False


# ---------------------------------------------------------------------------
# 케이스 4: 브랜치명 추출 테스트
# ---------------------------------------------------------------------------


def test_branch_extraction(tmp_path: Path):
    """'task/task-100.1-dev2' 패턴 브랜치명을 merge_branch에 추출"""
    content = """\
# task-100.1 작업 보고서

- **작업 ID**: task-100.1
- **팀**: dev2
- **작업 요약**: 신규 기능 추가
- **소요 시간**: 45분

## 브랜치 정보
작업 브랜치: `task/task-100.1-dev2`

머지 필요합니다. 메인 브랜치로 머지 요청드립니다.

## 결과
- **총 테스트**: 8
- **통과**: 8
- **실패**: 0
- **발견 버그**: 0건
"""
    filepath = _make_report(tmp_path, content)
    result = parse_report(filepath)

    assert result["merge_branch"] == "task/task-100.1-dev2"


# ---------------------------------------------------------------------------
# 케이스 5: summarize_oneline에 머지 표시 추가
# ---------------------------------------------------------------------------


def test_summarize_oneline_merge_indicator(tmp_path: Path):
    """merge_needed=True이면 요약 끝에 '| 🔀 머지 필요' 추가"""
    content = """\
# task-100.4 작업 보고서

- **작업 ID**: task-100.4
- **팀**: dev2
- **작업 요약**: API 구현
- **소요 시간**: 2시간

merge 판단은 아누에게 위임합니다.

## 결과
- **총 테스트**: 12
- **통과**: 12
- **실패**: 0
- **발견 버그**: 0건
"""
    filepath = _make_report(tmp_path, content)
    result = parse_report(filepath)
    oneline = summarize_oneline(result)

    assert result["merge_needed"] is True
    assert oneline.endswith("| 🔀 머지 필요")


# ---------------------------------------------------------------------------
# 추가 케이스: 워크트리 경로 추출
# ---------------------------------------------------------------------------


def test_worktree_path_extraction(tmp_path: Path):
    """/home/jay/projects/.worktrees/... 경로 추출"""
    content = """\
# task-100.5 작업 보고서

- **작업 ID**: task-100.5
- **팀**: dev1
- **작업 요약**: 워크트리 작업
- **소요 시간**: 20분

## 워크트리 정보
작업 경로: `/home/jay/projects/myapp/.worktrees/task-100.5`

머지 필요합니다.

## 결과
- **총 테스트**: 4
- **통과**: 4
- **실패**: 0
- **발견 버그**: 0건
"""
    filepath = _make_report(tmp_path, content)
    result = parse_report(filepath)

    assert result["merge_worktree"] == "/home/jay/projects/myapp/.worktrees/task-100.5"


# ---------------------------------------------------------------------------
# 추가 케이스: "아누 판단" 키워드 감지
# ---------------------------------------------------------------------------


def test_anu_judgment_keyword(tmp_path: Path):
    """'아누 판단' 포함 시 merge_needed=True"""
    content = """\
# task-100.6 작업 보고서

- **작업 ID**: task-100.6
- **팀**: dev3
- **작업 요약**: 데이터 처리 로직 구현
- **소요 시간**: 1시간 30분

## 머지 판단
아누 판단에 맡깁니다. 브랜치 상태를 확인 후 결정 바랍니다.

## 결과
- **총 테스트**: 7
- **통과**: 7
- **실패**: 0
- **발견 버그**: 0건
"""
    filepath = _make_report(tmp_path, content)
    result = parse_report(filepath)

    assert result["merge_needed"] is True


# ---------------------------------------------------------------------------
# 추가 케이스: "머지 필요" 키워드 (긍정) 감지
# ---------------------------------------------------------------------------


def test_merge_needed_positive(tmp_path: Path):
    """'머지 필요합니다' 포함 시 merge_needed=True"""
    content = """\
# task-100.7 작업 보고서

- **작업 ID**: task-100.7
- **팀**: dev2
- **작업 요약**: 인증 모듈 구현
- **소요 시간**: 3시간

## 배포 노트
작업 완료 후 머지 필요합니다. 충돌 없음을 확인하였습니다.

## 결과
- **총 테스트**: 15
- **통과**: 15
- **실패**: 0
- **발견 버그**: 0건
"""
    filepath = _make_report(tmp_path, content)
    result = parse_report(filepath)

    assert result["merge_needed"] is True


# ---------------------------------------------------------------------------
# 추가 케이스: merge_needed=False 시 summarize_oneline에 머지 표시 없음
# ---------------------------------------------------------------------------


def test_summarize_oneline_no_merge_indicator(tmp_path: Path):
    """merge_needed=False이면 요약에 '머지 필요' 문자열 없음"""
    content = """\
# task-100.8 작업 보고서

- **작업 ID**: task-100.8
- **팀**: dev1
- **작업 요약**: 문서 업데이트
- **소요 시간**: 10분

## 결과
- **총 테스트**: 2
- **통과**: 2
- **실패**: 0
- **발견 버그**: 0건
"""
    filepath = _make_report(tmp_path, content)
    result = parse_report(filepath)
    oneline = summarize_oneline(result)

    assert result["merge_needed"] is False
    assert "머지 필요" not in oneline


# ---------------------------------------------------------------------------
# 추가 케이스: "merge 불필요" → merge_needed=False (부정 표현)
# ---------------------------------------------------------------------------


def test_merge_unnecessary_keyword(tmp_path: Path):
    """'merge 불필요' 포함 시 merge_needed=False"""
    content = """\
# task-100.9 작업 보고서

- **작업 ID**: task-100.9
- **팀**: dev3
- **작업 요약**: 설정 파일 수정
- **소요 시간**: 5분

## 머지 판단
이번 작업은 merge 불필요합니다. 독립 작업입니다.

## 결과
- **총 테스트**: 1
- **통과**: 1
- **실패**: 0
- **발견 버그**: 0건
"""
    filepath = _make_report(tmp_path, content)
    result = parse_report(filepath)

    assert result["merge_needed"] is False
