#!/usr/bin/env python3
"""
agent67/run.py — Lambda 个人助理 🐂
====================================

一个能直接操控电脑的全能型 AI 助手，基于 lambdagent 构建。
使用 Claude Code Max Plan，无需 API Key。

Lambda 演算解读:
    λ = Memory(Loop(Brain >> parse_action >> route_execute))

能力:
    💻 终端命令执行     📁 文件管理
    🌐 浏览器控制       🚀 应用启动/切换
    📊 系统信息查询     📸 屏幕截图

用法:
    python run.py              # 使用 Claude Code Max Plan (默认)
    python run.py --api        # 使用 API Key 模式
    python run.py --model opus # 指定模型
"""
from __future__ import annotations

import argparse
import sys
import os
from pathlib import Path

# ── 路径设置 ──────────────────────────────────────────────
PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent  # Paper08/
AGENT_DIR = Path(__file__).resolve().parent                   # agent67/
sys.path.insert(0, str(PROJECT_ROOT))
sys.path.insert(0, str(AGENT_DIR.parent))  # agentexample/

from agent67.core.assistant import PersonalAssistant
from agent67.core.config import detect_backend, BANNER, BACKEND_OLLAMA


def main():
    parser = argparse.ArgumentParser(description="🐂 lambda — 个人助理")
    parser.add_argument("--api", action="store_true",
                        help="使用 API Key 模式（而非 Claude Code CLI）")
    parser.add_argument("--claude", action="store_true",
                        help="强制使用 Claude Code Max Plan (跳过 Ollama 检测)")
    parser.add_argument("--ollama", action="store_true",
                        help="使用 Ollama 本地模型 (qwen2.5:7b)")
    parser.add_argument("--model", type=str, default=None,
                        help="指定模型 (默认: 自动检测)")
    args = parser.parse_args()

    print(BANNER)

    # 检测后端
    model, use_api, backend = detect_backend()

    # 命令行覆盖
    if args.claude:
        from agent67.core.config import BACKEND_CLAUDE_CODE
        backend = BACKEND_CLAUDE_CODE
        model = args.model or "sonnet"
        use_api = False
        print("✅ 强制使用 Claude Code Max Plan")
    elif args.ollama:
        backend = BACKEND_OLLAMA
        model = args.model or "qwen2.5:7b"
        use_api = False
    elif args.api:
        use_api = True
        backend = "api"
        if not model:
            print("⚠️  --api 模式需要设置 API Key 环境变量:")
            print("   export ANTHROPIC_API_KEY=sk-ant-...")
            return
    if args.model and not args.ollama:
        model = args.model

    if not model and not backend:
        print("⚠️  未找到可用的 LLM 后端。")
        print("   方式 1: ollama serve && ollama pull qwen2.5:7b  (本地模型)")
        print("   方式 2: 安装 Claude Code: npm install -g @anthropic-ai/claude-code")
        print("   方式 3: export ANTHROPIC_API_KEY=sk-ant-...")
        return

    assistant = PersonalAssistant(model=model, use_api=use_api, backend=backend)
    print()

    while True:
        try:
            user_input = input("You: ").strip()
        except (EOFError, KeyboardInterrupt):
            print("\n👋 lambda 下线了，再见！")
            break

        if not user_input:
            continue

        if user_input.lower() in ("exit", "quit", "bye", "再见"):
            print("👋 lambda 下线了，祝你有美好的一天！")
            break

        if user_input.lower() == "trace":
            assistant.print_trace()
            continue

        if user_input.lower() == "stats":
            assistant.print_stats()
            continue

        if user_input.lower() == "history":
            print("\n📜 对话历史:")
            for entry in assistant.conversation_history:
                print(f"  [{entry['role']}] {entry['content'][:100]}")
            print()
            continue

        print()
        response = assistant.chat(user_input)
        # 如果是流式模式，response 已经在 chat() 中逐字显示过
        # 只有非流式模式才在这里打印
        if not (hasattr(assistant.brain, 'stream') and assistant.brain.stream):
            print(f"🐂 lambda: {response}")
        print()


if __name__ == "__main__":
    main()
