#!/usr/bin/env python3
"""
🌸 Nami Tools CLI — Unified command center for Nami Army
One command to rule them all.

Usage:
    nami status          Show all services and agents
    nami health          Run health check
    nami browser         Browser agent control
    nami agents          Coding agent status
    nami deploy <name>   Deploy/restart a service
    nami logs <name>     View service logs
    nami help            Show this help

Install:
    ln -sf /opt/nami-army/nami /usr/local/bin/nami
"""

import argparse
import subprocess
import sys
import os
from pathlib import Path

NAMI_DIR = Path("/opt/nami-army")
SHARED_DIR = Path("/opt/shared")


def run(cmd, **kwargs):
    """Run a command and return output."""
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True, **kwargs)
    return result.stdout.strip(), result.stderr.strip(), result.returncode


def cmd_status():
    """Show all services and agents status."""
    print("🌸 Nami Army Status")
    print("=" * 60)

    # Run health monitor
    stdout, stderr, rc = run("python3 /opt/nami-army/health_monitor.py")
    print(stdout)

    print("\n" + "=" * 60)
    print("🤖 Coding Agents:")
    print("  🔵 Claude Code  — Proxy v3 (MaxplusAI) ⚡⚡⚡")
    print("  🟢 OpenCode     — OpenRouter (Nemotron FREE) ⚡⚡")
    print("  🦈 thClaws      — OpenRouter v0.7.4 ✅")
    print("  🧭 Nami Router  — /opt/agent-wrappers/nami-router.py v2.0")

    print("\n📡 Endpoints:")
    endpoints = [
        ("Dashboard", "http://ecosystem.178.104.181.132.nip.io"),
        ("Hermes Gateway", "http://178.104.181.132:8644"),
        ("Nami Bridge WS", "ws://178.104.181.132:8888"),
        ("LaoPatana", "http://lao.178.104.181.132.nip.io"),
        ("Hanoi Stats", "http://hanoi.178.104.181.132.nip.io"),
        ("ClipboardByPao", "http://clipboardbypao.178.104.181.132.nip.io"),
        ("Gold Signal", "http://goldsignalos.178.104.181.132.nip.io"),
        ("MiroShark", "http://miroshark.178.104.181.132.nip.io"),
    ]
    for name, url in endpoints:
        print(f"  {name:20s} {url}")


def cmd_health():
    """Run health monitor."""
    os.execvp("python3", ["python3", str(NAMI_DIR / "health_monitor.py")])


def cmd_browser():
    """Browser agent commands."""
    args = sys.argv[2:] if len(sys.argv) > 2 else ["--status"]
    agent_path = str(NAMI_DIR / "browser_agent.py")
    os.execvp("python3", ["python3", agent_path] + args)


def cmd_agents():
    """Check coding agent status."""
    print("🤖 Coding Agent Status")
    print("=" * 40)

    # Claude Code
    print("\n🔵 Claude Code (MaxplusAI Proxy)")
    stdout, stderr, rc = run(
        "ANTHROPIC_BASE_URL=http://127.0.0.1:8091 ANTHROPIC_API_KEY=maxplus-proxy "
        "claude -p 'say OK' --max-turns 1 --bare 2>&1",
        timeout=20
    )
    if "OK" in stdout:
        print("  ✅ Working (proxy v3)")
    else:
        print(f"  ⚠️  {stdout[:50] or stderr[:50]}")

    # OpenCode
    print("\n🟢 OpenCode (OpenRouter)")
    stdout, stderr, rc = run(
        "OPENROUTER_API_KEY=$(python3 -c \"import json;print(json.load(open('/opt/shared/ai_config.json')).get('_stored_keys',{}).get('openrouter',''))\") "
        "opencode run --model openrouter/nvidia/nemotron-nano-9b-v2:free 'say OK' 2>&1",
        timeout=15
    )
    if "OK" in stdout:
        print("  ✅ Working (Nemotron FREE)")
    else:
        print(f"  ⚠️  {stdout[:50] or stderr[:50]}")

    # thClaws
    print("\n🦈 thClaws v0.7.4 (OpenRouter)")
    stdout, stderr, rc = run(
        "OPENROUTER_API_KEY=$(python3 -c \"import json;print(json.load(open('/opt/shared/ai_config.json')).get('_stored_keys',{}).get('openrouter',''))\") "
        "thclaws -p 'say OK' --accept-all -m openrouter/nvidia/nemotron-nano-9b-v2:free 2>&1",
        timeout=20
    )
    if "OK" in stdout:
        print("  ✅ Working")
    else:
        print(f"  ⚠️  {stdout[:50] or stderr[:50]}")


def cmd_deploy():
    """Deploy/restart a service."""
    if len(sys.argv) < 3:
        print("Usage: nami deploy <service-name>")
        print("Services: laopatana, hanoi, clipboard, gold, miroshark-backend, miroshark-frontend, bridge, nginx")
        return

    service = sys.argv[2]
    service_map = {
        "laopatana": "laopatana-stat-lab",
        "hanoi": "hanoi-stats-analyzer",
        "clipboard": "clipboardbypao",
        "gold": "gold-signal-os",
        "miroshark-backend": "miroshark-backend",
        "miroshark-frontend": "miroshark-frontend",
        "bridge": "nami-bridge",
        "nginx": "nginx",
    }

    svc_name = service_map.get(service, service)
    print(f"🔄 Restarting {svc_name}...")
    stdout, stderr, rc = run(f"systemctl restart {svc_name} 2>&1")
    
    if rc == 0:
        print(f"✅ {svc_name} restarted")
        # Check status
        stdout, stderr, rc = run(f"systemctl is-active {svc_name}")
        print(f"   Status: {stdout}")
    else:
        print(f"❌ Failed: {stderr}")


def cmd_logs():
    """View service logs."""
    if len(sys.argv) < 3:
        print("Usage: nami logs <service-name>")
        return

    service = sys.argv[2]
    service_map = {
        "laopatana": "laopatana-stat-lab",
        "hanoi": "hanoi-stats-analyzer",
        "clipboard": "clipboardbypao",
        "gold": "gold-signal-os",
        "miroshark-backend": "miroshark-backend",
        "miroshark-frontend": "miroshark-frontend",
        "bridge": "nami-bridge",
        "nginx": "nginx",
    }

    svc_name = service_map.get(service, service)
    os.execvp("journalctl", ["journalctl", "-u", svc_name, "--no-pager", "-n", "50", "-f"])


def cmd_help():
    """Show help."""
    print(__doc__)


COMMANDS = {
    "status": cmd_status,
    "health": cmd_health,
    "browser": cmd_browser,
    "agents": cmd_agents,
    "deploy": cmd_deploy,
    "logs": cmd_logs,
    "help": cmd_help,
}


def main():
    if len(sys.argv) < 2:
        cmd_status()
        return

    cmd = sys.argv[1]
    if cmd in COMMANDS:
        COMMANDS[cmd]()
    elif cmd in ("-h", "--help"):
        cmd_help()
    else:
        print(f"Unknown command: {cmd}")
        print(f"Available: {', '.join(COMMANDS.keys())}")
        print("Run 'nami' without arguments for status")


if __name__ == "__main__":
    main()
