from typing import Dict

_SANITIZE_GATE_INSTRUCTION = "외부 AI 호출 전 sanitize 게이트 필수: PII(주민번호/연락처/API키) 마스킹 후 전달."

GATE_INSTRUCTIONS: Dict[int, Dict[str, str]] = {
    0: {
        "g1": "",  # 스킵
        "g2": "셀프 QC: 구문 에러, 기본 기능 확인.",
        "g3": "즉시 머지.",
    },
    1: {
        "g1": "",  # 스킵
        "g2": "셀프 QC: 구문 에러, 기본 기능 확인.",
        "g3": "즉시 머지.",
    },
    2: {
        "g1": "affected_files에 명시된 파일 확인. 다른 팀과 겹침 없는지 확인.",
        "g2": "팀 테스터 또는 마아트 QC 수행. 기능 테스트 필수.",
        "g3": "worktree finish --action pr로 PR 생성 → Gemini 리뷰 대기(5분) → High 0건 시 자동 머지. 타임아웃 시 리뷰 없이 머지.",
    },
    3: {
        "g1": f'3문서 필수. Codex 사전 검증 PASS 필요. affected_files 교차 분석. 3 Step Why 2nd 검증: Codex 사전 리뷰 시 "이 설계의 대안은 무엇이며, 왜 이 접근이 최선인가?" 질문을 포함할 것. {_SANITIZE_GATE_INSTRUCTION}',
        "g2": "Gemini PR 리뷰 + 마아트 독립 검증. 두 검증 모두 PASS 필요.",
        "g3": "G3 독립 검증 필수: python3 scripts/g3_independent_verifier.py --task-id {task_id} 실행 → PASS 필요. worktree finish --action pr → Gemini 리뷰 + 충돌 감지 시 집중 리뷰. 시맨틱 충돌 분석. High 0건 시 자동 머지.",
    },
    4: {
        "g1": f"3문서 필수 + Agent 미팅 만장일치 + Codex 사전 검증 PASS. {_SANITIZE_GATE_INSTRUCTION}",
        "g2": 'Gemini PR 리뷰 + 마아트 QC + 로키 레드팀 투입. 전체 PASS 필요. 3 Step Why 3rd 검증: 로키(DA) 레드팀 리뷰 시 "이 설계가 실패할 수 있는 시나리오는?" 적대적 질문을 포함할 것.',
        "g3": "G3 독립 검증 필수: python3 scripts/g3_independent_verifier.py --task-id {task_id} 실행 → PASS 필요. 전팀 완료 대기 + worktree finish --action pr → Gemini 리뷰 + Graduated Auto-Gate (L1→L2→L3) 통과 필수.",
    },
}


def get_gate_instructions(level: int) -> Dict[str, str]:
    """레벨에 해당하는 게이트 지시를 반환."""
    return GATE_INSTRUCTIONS.get(level, GATE_INSTRUCTIONS[0])


def format_for_prompt(level: int) -> str:
    """프롬프트에 삽입할 게이트 지시 문자열을 생성.

    level >= 3일 때 g1에 sanitize 게이트 지시가 자동 포함됩니다.
    (GATE_INSTRUCTIONS의 g1 값에 이미 포함되어 있으므로 별도 처리 불필요)
    """
    gates = get_gate_instructions(level)
    lines = []
    if gates["g1"]:
        lines.append(f"[G1 설계 게이트] {gates['g1']}")
    if gates["g2"]:
        lines.append(f"[G2 구현 게이트] {gates['g2']}")
    if gates["g3"]:
        lines.append(f"[G3 머지 게이트] {gates['g3']}")
    return "\n".join(lines)


def should_run_codex_check(level: int) -> bool:
    """해당 레벨에서 Codex 사전 검증이 필요한지 반환."""
    return level >= 3


def get_codex_gate_command(
    task_file: str, affected_files: list[str], workspace_root: str = "/home/jay/workspace"
) -> list[str]:
    """codex_gate_check.py 실행 명령 반환."""
    import os

    script_path = os.path.join(workspace_root, "scripts", "codex_gate_check.py")
    cmd = ["python3", script_path, "--task-file", task_file]
    if affected_files:
        cmd.extend(["--affected-files"] + affected_files)
    cmd.extend(["--workspace-root", workspace_root])
    return cmd
