import os
import subprocess
from pathlib import Path

def run_claude(repo_path: str, task: str) -> dict:
    repo = Path(repo_path).resolve()

    claude_bin = os.getenv("CLAUDE_BIN", "/home/ji/.local/bin/claude")
    api_key = os.getenv("DEEPSEEK_API_KEY", "")

    if not api_key:
        return {
            "executor": "claude_deepseek",
            "returncode": 1,
            "stdout": "",
            "stderr": "DEEPSEEK_API_KEY 未设置，请在 .env 中配置。",
        }

    prompt = f"""
你是一个工程型 AI 员工，正在分析一个代码仓库。

任务：
{task}

要求：
- 先检查项目结构
- 不要修改代码
- 只输出项目分析和下一步建议
"""

    env = os.environ.copy()
    env.update({
        "ANTHROPIC_BASE_URL": os.getenv("ANTHROPIC_BASE_URL", "https://api.deepseek.com/anthropic"),
        "ANTHROPIC_AUTH_TOKEN": api_key,
        "ANTHROPIC_MODEL": os.getenv("ANTHROPIC_MODEL", "deepseek-v4-pro"),
        "ANTHROPIC_DEFAULT_OPUS_MODEL": os.getenv("ANTHROPIC_DEFAULT_OPUS_MODEL", "deepseek-v4-pro"),
        "ANTHROPIC_DEFAULT_SONNET_MODEL": os.getenv("ANTHROPIC_DEFAULT_SONNET_MODEL", "deepseek-v4-pro"),
        "ANTHROPIC_DEFAULT_HAIKU_MODEL": os.getenv("ANTHROPIC_DEFAULT_HAIKU_MODEL", "deepseek-v4-flash"),
        "CLAUDE_CODE_SUBAGENT_MODEL": os.getenv("CLAUDE_CODE_SUBAGENT_MODEL", "deepseek-v4-flash"),
        "CLAUDE_CODE_EFFORT_LEVEL": os.getenv("CLAUDE_CODE_EFFORT_LEVEL", "max"),
    })

    try:
        result = subprocess.run(
            [claude_bin, "-p", prompt],
            cwd=repo,
            text=True,
            capture_output=True,
            timeout=1800,
            env=env,
        )

        return {
            "executor": "claude_deepseek",
            "returncode": result.returncode,
            "stdout": result.stdout[-8000:],
            "stderr": result.stderr[-4000:],
        }

    except FileNotFoundError:
        return {
            "executor": "claude_deepseek",
            "returncode": 127,
            "stdout": "",
            "stderr": f"找不到 Claude CLI: {claude_bin}",
        }

    except subprocess.TimeoutExpired:
        return {
            "executor": "claude_deepseek",
            "returncode": 124,
            "stdout": "",
            "stderr": "Claude 执行超时。",
        }