#!/usr/bin/env python3
"""
sipi_debug.py - Interruptor central de modo debug para las herramientas
de SiPi (servidor de IA, CLI, editor).

Activar con la variable de entorno SIPI_DEBUG=1 (o "true"/"si"). Por
default (produccion) queda apagado: los mensajes internos de
diagnostico no se imprimen y los errores que se muestran al usuario
final son mensajes limpios, sin rutas de archivo ni nombres de modulos
internos ni tracebacks completos.

Uso:
    from sipi_debug import debug_activo, log_debug, mensaje_error_usuario

    log_debug("Conexion recibida de {}".format(origen))  # solo con SIPI_DEBUG=1

    try:
        ...
    except Exception as e:
        print(mensaje_error_usuario(e, "no se pudo procesar el pedido"))
"""
import os
import sys
import traceback


def debug_activo():
    valor = os.environ.get("SIPI_DEBUG", "").strip().lower()
    return valor in ("1", "true", "si", "sí", "yes", "on")


def log_debug(mensaje):
    """Imprime un mensaje de diagnostico SOLO si SIPI_DEBUG esta activo.
    Usar para todo lo que sea util para desarrollar/depurar pero que un
    usuario final no necesita ver (rutas internas, payloads crudos,
    estados intermedios)."""
    if debug_activo():
        print(f"[debug] {mensaje}", file=sys.stderr)


def mensaje_error_usuario(excepcion, contexto=""):
    """Arma un mensaje de error para mostrarle al usuario final: claro,
    sin ruta de archivo ni traceback, sin nombre de excepcion interna de
    Python. Si SIPI_DEBUG esta activo, agrega el detalle completo abajo
    (para quien esta desarrollando, no para el usuario comun)."""
    prefijo = f"{contexto}: " if contexto else ""
    base = f"[SiPi] {prefijo}ocurrio un error inesperado."
    if debug_activo():
        detalle = "".join(traceback.format_exception(type(excepcion), excepcion, excepcion.__traceback__))
        return f"{base}\n\n--- Detalle (SIPI_DEBUG activo) ---\n{detalle}"
    return base + " Activa SIPI_DEBUG=1 para ver el detalle tecnico completo."
