#!/usr/bin/env bash
set -Eeuo pipefail

echo "=== Fáze 1: Nástroje pro safe-oi ==="

cd ~/CyberBrain26

# Aktualizuj safe_oi_runner.py s nástroji
cat > scripts/safe_oi_runner.py <<'EOF'
import os
import sys
import subprocess
import atexit
from prompt_toolkit import PromptSession
from prompt_toolkit.key_binding import KeyBindings

PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TOOLS_DIR = os.path.join(PROJECT_DIR, "tools")

if PROJECT_DIR not in sys.path:
    sys.path.insert(0, PROJECT_DIR)
if TOOLS_DIR not in sys.path:
    sys.path.insert(0, TOOLS_DIR)

from memory_core import save_memory
from interpreter import interpreter

# Git tools
def git_status():
    try:
        result = subprocess.run(["git", "status", "--short"], capture_output=True, text=True, cwd=PROJECT_DIR)
        return result.stdout if result.returncode == 0 else f"Git error: {result.stderr}"
    except Exception as e:
        return f"Git status failed: {e}"

def git_diff():
    try:
        result = subprocess.run(["git", "diff"], capture_output=True, text=True, cwd=PROJECT_DIR)
        return result.stdout if result.returncode == 0 else f"Git error: {result.stderr}"
    except Exception as e:
        return f"Git diff failed: {e}"

def git_log(limit=5):
    try:
        result = subprocess.run(["git", "log", f"-{limit}", "--oneline"], capture_output=True, text=True, cwd=PROJECT_DIR)
        return result.stdout if result.returncode == 0 else f"Git error: {result.stderr}"
    except Exception as e:
        return f"Git log failed: {e}"

# File tools
def list_files(path="."):
    try:
        full_path = os.path.join(PROJECT_DIR, path)
        files = os.listdir(full_path)
        return "\n".join(sorted(files))
    except Exception as e:
        return f"List failed: {e}"

def read_file(path):
    try:
        full_path = os.path.join(PROJECT_DIR, path)
        with open(full_path, "r") as f:
            return f.read()
    except Exception as e:
        return f"Read failed: {e}"

# Nástroje pro interpreter
TOOLS = {
    "git_status": git_status,
    "git_diff": git_diff,
    "git_log": git_log,
    "list_files": list_files,
    "read_file": read_file,
}

# Výběr modelu
MODELY = {
    "1": ("gemini-pro", "Gemini 2.5 Flash"),
    "2": ("mistral-large", "Mistral Large"),
}

print("\n=== CyberBrain26 safe-oi s nástroji ===")
for klic, (_, nazev) in MODELY.items():
    print(f"  [{klic}] {nazev}")

volba = input("\nZvol model (1-2, výchozí=1): ").strip()
model_id, _ = MODELY.get(volba, MODELY["1"])

# Konfigurace
interpreter.llm.model = f"openai/{model_id}"
interpreter.llm.api_base = "http://127.0.0.1:4000/v1"
interpreter.llm.api_key = os.environ.get("LITELLM_MASTER_KEY", "sk-cb26-local")
interpreter.llm.provider = "openai"
interpreter.llm.context_window = 100000
interpreter.llm.max_tokens = 4096
interpreter.auto_run = False
interpreter.loop = False
interpreter.force_final_answer = True

# System prompt s nástroji
interpreter.system_message = """
CyberBrain26 AI asistent s nástroji.

Dostupné funkce:
- git_status() — git status --short
- git_diff() — git diff
- git_log(limit=5) — posledních N commitů
- list_files(path=".") — výpis souborů
- read_file(path) — obsah souboru

Používej nástroje k analýze projektu. Vždy se ptej před spuštěním kódu.
"""

kb = KeyBindings()
@kb.add('c-x')
def _(event):
    event.app.current_buffer.text = ''
    print("\n⛔ Přerušeno")

session = PromptSession(key_bindings=kb)

print("\n🔒 SAFE-OI: Ctrl+X = přerušit | Ctrl+C = ukončit\n")

while True:
    try:
        user_input = session.prompt("🧑 ").strip()
        if not user_input:
            continue
        if user_input.lower() in ["quit", "exit", "q"]:
            print("👋 Ukončuji.")
            break
        
        print("\n🤖 ", end="")
        response_chunks = []
        
        try:
            for chunk in interpreter.chat(user_input, stream=True):
                if chunk.get("type") == "message":
                    content = chunk.get("content", "")
                    print(content, end="", flush=True)
                    response_chunks.append(content)
            print("\n")
        except KeyboardInterrupt:
            print("\n⛔ Přerušeno.")
            interpreter.messages = interpreter.messages[:-1]
        
    except KeyboardInterrupt:
        print("\n\n👋 Ukončeno")
        break
    except Exception as e:
        print(f"\n❌ Chyba: {e}")
        import traceback
        traceback.print_exc()
EOF

chmod +x scripts/safe_oi_runner.py

echo "✅ Nástroje přidány: git_status, git_diff, git_log, list_files, read_file"
echo "📝 Spusť: ./scripts/safe-oi"
