"""claude -p CLI 래퍼 모듈 - Anthropic SDK 대신 CLI를 통해 모델 호출"""

import os
import subprocess


def call_claude(
    prompt: str,
    model: str = "claude-sonnet-4-6",
    max_tokens: int = 4096,
    system: str | None = None,
    timeout: int = 300,
) -> str:
    """claude -p CLI를 통해 모델 호출.

    Args:
        prompt: 사용자 프롬프트
        model: 사용할 모델 (기본: claude-sonnet-4-6)
        max_tokens: 최대 토큰 수 (현재 CLI에서 미지원, 향후 대비)
        system: 시스템 프롬프트 (선택)
        timeout: subprocess 타임아웃 (초, 기본 120)

    Returns:
        모델 응답 텍스트

    Raises:
        RuntimeError: claude -p 실행 실패 시
        subprocess.TimeoutExpired: 타임아웃 초과 시
    """
    env = os.environ.copy()
    env.pop("CLAUDECODE", None)  # 중첩 세션 방지

    cmd = ["claude", "-p", prompt, "--output-format", "text", "--model", model, "--max-turns", "1", "--tools", "", "--setting-sources", "user"]
    if system:
        cmd.extend(["--system-prompt", system])

    result = subprocess.run(cmd, capture_output=True, text=True, env=env, timeout=timeout)
    if result.returncode != 0:
        raise RuntimeError(f"claude -p failed (exit {result.returncode}): {result.stderr}")
    return result.stdout.strip()


def estimate_tokens(text: str) -> int:
    """텍스트의 토큰 수를 추정 (chars/4).

    claude -p는 토큰 사용량을 직접 리턴하지 않으므로,
    문자 수 / 4로 추정한다.
    """
    return max(1, len(text) // 4)
