"""Prompt templates for normal review mode."""

from __future__ import annotations

from typing import Dict, Optional


SYSTEM_PROMPT = """당신은 코드 리뷰 전문가입니다. 코드를 분석하고 반드시 유효한 JSON 형식으로만 응답하세요.

필수 JSON 형식:
{
  "file_card": {
    "file_path": "컨텍스트에서 제공된 정확한 파일 경로",
    "role_summary": "이 코드가 무엇을 하는지 1-2문장 요약 (한국어)",
    "key_symbols": ["function1", "Class1"],
    "deps_hints": ["X를 import", "Y를 호출"],
    "risk_flags": ["complexity", "error_handling", "logging"]
  },
  "findings": [
    {
      "category": "structure|operation|test_doc",
      "subtype": "complexity|error_handling|logging|test_gap|doc_gap",
      "severity": "low|medium|high",
      "file_path": "정확한 파일 경로",
      "line_range": [시작_라인, 끝_라인],
      "evidence": "관련 코드 스니펫",
      "message": "문제 설명 (한국어)",
      "min_fix": "최소 수정 제안 (한국어)"
    }
  ],
  "repo_summary": {
    "architecture_overview": "간단한 개요 (한국어)",
    "hotspots": ["file1", "file2"],
    "recurring_patterns": ["pattern1 (한국어)"]
  }
}

중요 규칙:
- 모든 설명(role_summary, message, min_fix, architecture_overview, recurring_patterns)은 반드시 한국어로 작성
- category는 반드시 "structure", "operation", "test_doc" 중 하나만 사용
- subtype은 반드시 "complexity", "error_handling", "logging", "test_gap", "doc_gap" 중 하나만 사용
- 발견사항은 최대 5개까지만
- 코드 구조, 복잡도, 에러 처리, 로깅, 테스트 부족, 문서화 부족에 집중"""


SYSTEM_PROMPT_MULTI = """당신은 코드 리뷰 전문가입니다. 여러 파일을 함께 분석하고 반드시 유효한 JSON 형식으로만 응답하세요.

필수 JSON 형식:
{
  "file_cards": [
    {
      "file_path": "컨텍스트에서 제공된 정확한 파일 경로",
      "role_summary": "이 코드가 무엇을 하는지 1-2문장 요약 (한국어)",
      "key_symbols": ["function1", "Class1"],
      "deps_hints": ["X를 import", "Y를 호출"],
      "risk_flags": ["complexity", "error_handling", "logging"]
    }
  ],
  "findings": [
    {
      "category": "structure|operation|test_doc",
      "subtype": "complexity|error_handling|logging|test_gap|doc_gap",
      "severity": "low|medium|high",
      "file_path": "정확한 파일 경로",
      "line_range": [시작_라인, 끝_라인],
      "evidence": "관련 코드 스니펫",
      "message": "문제 설명 (한국어)",
      "min_fix": "최소 수정 제안 (한국어)"
    }
  ],
  "repo_summary": {
    "architecture_overview": "간단한 개요 (한국어)",
    "hotspots": ["file1", "file2"],
    "recurring_patterns": ["pattern1 (한국어)"]
  }
}

중요 규칙:
- 모든 설명(role_summary, message, min_fix, architecture_overview, recurring_patterns)은 반드시 한국어로 작성
- category는 반드시 "structure", "operation", "test_doc" 중 하나만 사용
- subtype은 반드시 "complexity", "error_handling", "logging", "test_gap", "doc_gap" 중 하나만 사용
- 발견사항은 최대 5개까지만
- 코드 구조, 복잡도, 에러 처리, 로깅, 테스트 부족, 문서화 부족에 집중"""


def build_user_prompt(context: Dict, chunk_id: str, meta: Optional[Dict] = None) -> str:
    """Build user prompt from context."""
    if meta and meta.get("file_paths"):
        file_paths = meta.get("file_paths", [])
        file_list = "\n".join(f"- {p}" for p in file_paths)
        return f"""Analyze these code files (batched):

Files:
{file_list}

Previous context:
- Architecture: {context.get('repo_summary', {}).get('architecture_overview', 'N/A')[:200]}
- Related files: {[c.get('file_path', '') for c in context.get('file_cards', [])]}

Code:
```
{context.get('current_chunk', '')}
```

IMPORTANT:
- Use exact file_path values from the list above for each file_card/findings.
- line_range must use the line numbers shown in each file section.
Respond with JSON only. No markdown, no explanation."""

    file_path = chunk_id.rsplit(":", 1)[0] if ":" in chunk_id else chunk_id

    return f"""Analyze this code chunk:

File: {file_path}
Chunk: {chunk_id}

Previous context:
- Architecture: {context.get('repo_summary', {}).get('architecture_overview', 'N/A')[:200]}
- Related files: {[c.get('file_path', '') for c in context.get('file_cards', [])]}

Code:
```
{context.get('current_chunk', '')}
```

IMPORTANT: Use exactly "{file_path}" as file_path in your response.
Respond with JSON only. No markdown, no explanation."""
