#!/usr/bin/env python3
"""
verify_done.py - .done 소비자 게이트: task 완료 시그니처 자동 검증

.done 파일 감지 시 task 파일의 ## 완료 시그니처 섹션을 읽어 grep/pytest로 검증.
- PASS → .done 유지
- FAIL → .done → .done.rejected로 rename + 사유 기록
- SKIP → 시그니처 없는 기존 task, 아무것도 하지 않음
"""

import json
import os
import sys
from datetime import datetime, timezone, timedelta

# signature_check 모듈 import 경로 추가
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "teams", "shared", "verifiers"))
import signature_check

KST = timezone(timedelta(hours=9))


def verify_done(task_id: str, workspace_root: str = "/home/jay/workspace") -> dict:
    """
    .done 파일 감지 시 자동 검증 실행.

    Returns:
        {"status": "PASS"|"FAIL"|"SKIP", "action": "keep"|"reject"|"skip", "details": [...]}
        FAIL 시 추가: "failed_signatures": [...]
    """
    events_dir = os.path.join(workspace_root, "memory", "events")
    done_path = os.path.join(events_dir, f"{task_id}.done")
    rejected_path = os.path.join(events_dir, f"{task_id}.done.rejected")

    # signature_check.verify()에 위임하여 검증 실행
    result = signature_check.verify(task_id, workspace_root)

    status = result.get("status", "SKIP")
    details = result.get("details", [])

    if status == "PASS":
        # .done 파일 유지 (아무것도 하지 않음)
        return {"status": "PASS", "action": "keep", "details": details}

    elif status == "FAIL":
        failed_signatures = result.get("failed_signatures", [])

        # .done 파일이 존재하면 .done.rejected로 rename
        if os.path.exists(done_path):
            os.rename(done_path, rejected_path)
            # .done.rejected 파일에 거절 사유 기록 (JSON)
            rejected_at = datetime.now(KST).isoformat()
            rejection_data = {
                "task_id": task_id,
                "status": "FAIL",
                "rejected_at": rejected_at,
                "failed_signatures": failed_signatures,
                "details": details,
            }
            with open(rejected_path, "w", encoding="utf-8") as f:
                json.dump(rejection_data, f, ensure_ascii=False, indent=2)

        return {
            "status": "FAIL",
            "action": "reject",
            "details": details,
            "failed_signatures": failed_signatures,
        }

    else:
        # SKIP: 시그니처 없는 기존 task → 아무것도 하지 않음
        return {"status": "SKIP", "action": "skip", "details": details}


if __name__ == "__main__":
    task_id = sys.argv[1]
    workspace_root = sys.argv[2] if len(sys.argv) > 2 else "/home/jay/workspace"
    result = verify_done(task_id, workspace_root)
    print(json.dumps(result, ensure_ascii=False, indent=2))
    sys.exit(0 if result["status"] != "FAIL" else 1)
