"""비너스(Gemini) 호출 스크립트 - 토르(Thor), 개발2팀."""

import subprocess

VENUS_SYSTEM_PROMPT = """당신은 비너스(Venus), 디자인 디렉터입니다.
미의 여신. 예쁜 게 아니라 맞는 것을 추구합니다.

전문 분야:
- 브랜드 아이덴티티, 컬러 시스템, 톤앤매너 정의
- 디자인 토큰 정의, 아이콘 스타일 가이드
- WCAG 접근성 기준
- 코드 세컨드 오피니언 (Gemini 관점)
- Opus가 막힌 문제에 대한 대안 접근

답변 시:
- 심미적 기준과 일관성을 강조하세요
- 실제 사용성 중심으로 판단하세요
- 다른 관점을 제시하는 것을 두려워하지 마세요"""


def invoke_venus(
    prompt: str,
    context_files: list[str] | None = None,
    timeout: int = 120,
) -> str:
    """
    비너스(Gemini)에게 디자인/세컨드오피니언 요청.

    Args:
        prompt: 비너스에게 보낼 프롬프트
        context_files: 참조할 파일 경로 리스트
        timeout: 응답 대기 시간(초)

    Returns:
        Gemini의 응답 텍스트
    """
    parts: list[str] = [VENUS_SYSTEM_PROMPT]

    if context_files:
        for path in context_files:
            try:
                with open(path, encoding="utf-8") as f:
                    content = f.read()
                parts.append(f"--- 파일: {path} ---\n{content}\n")
            except FileNotFoundError:
                parts.append(f"[경고] 파일을 찾을 수 없습니다: {path}\n")

    parts.append(prompt)
    full_prompt = "\n\n".join(parts)

    try:
        result = subprocess.run(
            ["gemini", "-p", full_prompt],
            capture_output=True,
            text=True,
            timeout=timeout,
        )
        if result.returncode != 0:
            raise subprocess.CalledProcessError(result.returncode, "gemini", result.stdout, result.stderr)
        return result.stdout
    except subprocess.TimeoutExpired:
        return (
            "[Venus 오류] 응답 대기 시간이 초과되었습니다"
            f" (timeout={timeout}초)."
            " fallback으로 Claude Task tool 사용을 고려하세요."
        )
    except subprocess.CalledProcessError as e:
        return (
            f"[Venus 오류] gemini CLI 실행 실패 (returncode={e.returncode}):"
            f" {e.stderr or e.stdout}"
            " fallback으로 Claude Task tool 사용을 고려하세요."
        )
    except Exception as e:  # noqa: BLE001
        return f"[Venus 오류] 예상치 못한 오류가 발생했습니다: {e}" " fallback으로 Claude Task tool 사용을 고려하세요."


if __name__ == "__main__":
    import argparse

    parser = argparse.ArgumentParser(description="비너스(Gemini) 호출 스크립트")
    parser.add_argument("--prompt", required=True, help="비너스에게 보낼 프롬프트")
    parser.add_argument("--files", nargs="*", default=None, help="참조할 파일 경로 목록")
    parser.add_argument("--timeout", type=int, default=120, help="응답 대기 시간(초)")
    args = parser.parse_args()
    result = invoke_venus(args.prompt, args.files, args.timeout)
    print(result)
