#!/usr/bin/env python3
"""Daemon de análisis de imágenes para taller — puerto 5556."""
import sys
import os
import json
import subprocess
import uuid
from http.server import HTTPServer, BaseHTTPRequestHandler

CLAUDE_BIN = "/home/open/.local/bin/claude"
TMP_DIR    = "/var/www/html/Carlos_proyect/taller/tmp"
PORT       = 5556


def analizar_imagen(imagen_path):
    prompt = (
        "Analiza esta imagen. Lista ÚNICAMENTE las herramientas que ves "
        "(martillos, destornilladores, llaves, alicates, sierras, taladros, "
        "soldadores, multímetros, etc.). "
        "Si no hay herramientas, devuelve un array vacío. "
        "NO incluyas materiales, componentes, cables, tornillos ni objetos que no sean herramientas. "
        "Responde SOLO con un JSON válido sin texto adicional:\n"
        "[{\"nombre\":\"...\",\"descripcion\":\"...\",\"categoria\":\"herramienta_manual o herramienta_electrica\"}]"
        f"\n@{imagen_path}"
    )

    result = subprocess.run(
        [CLAUDE_BIN, "-p", prompt, "--output-format", "text"],
        capture_output=True, text=True, timeout=45,
        env={**os.environ, "HOME": "/home/open"}
    )

    respuesta = result.stdout.strip()

    try:
        i = respuesta.index("[")
        j = respuesta.rindex("]") + 1
        herramientas = json.loads(respuesta[i:j])
        return {"ok": True, "herramientas": herramientas}
    except (ValueError, json.JSONDecodeError):
        return {"ok": True, "herramientas": [], "texto": respuesta}


class Handler(BaseHTTPRequestHandler):
    def log_message(self, fmt, *args):
        pass

    def do_POST(self):
        length = int(self.headers.get('Content-Length', 0))
        body   = self.rfile.read(length)
        data   = json.loads(body)
        img    = data.get("imagen_path", "")

        if not img or not os.path.exists(img):
            resp = json.dumps({"ok": False, "error": "Imagen no encontrada"}).encode()
        else:
            resultado = analizar_imagen(img)
            resp = json.dumps(resultado, ensure_ascii=False).encode()

        self.send_response(200)
        self.send_header("Content-Type", "application/json")
        self.send_header("Content-Length", len(resp))
        self.end_headers()
        self.wfile.write(resp)

    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'{"ok":true}')


if __name__ == "__main__":
    print(f"Taller daemon en 127.0.0.1:{PORT}", flush=True)
    HTTPServer(("127.0.0.1", PORT), Handler).serve_forever()
