"""Taller privado: informes TXT, sin ejecutar código ni servir archivos por HTTP."""
import json, re, secrets
from pathlib import Path
from datetime import datetime, timezone
ROOT=Path('/var/lib/hermes-nexus/taller')
SUB={'diagnostico':'diagnosticos','reporte':'reportes','codigo':'codigo','nota':'reportes'}
def redactar(texto):
    s=str(texto)
    s=re.sub(r'https?://[^\s<>"\']+', '[URL_OCULTA]', s, flags=re.I)
    s=re.sub(r'(?i)(authorization|password|passwd|api[_-]?key|token|secret|clave)\s*[:=]\s*[^\s,;}]+',r'\1=[OCULTO]',s)
    s=re.sub(r'(?i)\bBasic\s+[A-Za-z0-9+/=]+','Basic [OCULTO]',s)
    return s[:16000]
def guardar_en_taller(titulo,contenido,tipo='diagnostico'):
    if tipo not in SUB or not isinstance(titulo,str) or not isinstance(contenido,str) or not contenido.strip():
        raise ValueError('Documento inválido')
    folder=ROOT/SUB[tipo]
    folder.mkdir(parents=True,exist_ok=True,mode=0o700)
    folder.chmod(0o700)
    stamp=datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S')
    slug=re.sub(r'[^a-z0-9]+','_',titulo.casefold())[:45].strip('_') or 'nota'
    name=stamp+'_'+slug+'_'+secrets.token_hex(3)+'.txt'
    path=folder/name
    with path.open('x',encoding='utf-8') as f:
        f.write('HERMES TALLER PRIVADO\nFecha UTC: '+datetime.now(timezone.utc).isoformat()+'\nTítulo: '+redactar(titulo)[:120]+'\n\n'+redactar(contenido)+'\n')
    path.chmod(0o600)
    return {'guardado':True,'archivo':name,'carpeta':str(folder),'descarga':'WinSCP/SFTP'}
def registrar_intento(equipo,resultado):
    if not isinstance(resultado,dict):resultado={'estado':'RESULTADO_DESCONOCIDO'}
    campos=('estado','motivo','partido','canal','event_id','verificacion_http','confirmacion_publica','mensaje')
    safe={k:resultado[k] for k in campos if k in resultado}
    return guardar_en_taller('asignacion_'+str(equipo),'Equipo: '+redactar(equipo)+'\nResultado real:\n'+json.dumps(safe,ensure_ascii=False,indent=2),'diagnostico')
