#!/usr/bin/env python3
"""
generar_contexto_ia.py -- Arma un unico archivo con todo lo que una IA
(Claude, GPT, Gemini, etc.) necesita en su contexto para escribir SiPi
correctamente desde el primer intento, en vez de "adivinar" sintaxis
parecida a Python/JS.

Por que un script y no un archivo escrito a mano: si escribieramos el
paquete de contexto a mano, se desactualizaria en cuanto FUNCTIONS.md o
AI_GUIDE.md cambien. Este script concatena las fuentes de verdad ya
existentes (que de cualquier forma hay que mantener al dia) y arma un
solo archivo pensado para copiar y pegar entero en el system prompt o
los "custom instructions" de cualquier asistente de IA.

Uso:
    python3 generar_contexto_ia.py
    -> escribe docs/CONTEXTO_IA_COMPLETO.md
"""
import os
import datetime

RUTA_DOCS = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "docs")

# Orden pensado para que una IA lea primero las reglas duras y los
# errores comunes (lo mas barato de corregir), despues la sintaxis,
# despues la lista completa de comandos, y por ultimo ejemplos reales.
ARCHIVOS_FUENTE = [
    "AI_GUIDE.md",
    "SYNTAX.md",
    "LANGUAGE_SPEC.md",
    "FUNCTIONS.md",
    "GLOSSARY.md",
]

ENCABEZADO = """# CONTEXTO COMPLETO DE SIPI PARA ASISTENTES DE IA

> Archivo generado automaticamente por `herramientas/generar_contexto_ia.py`
> a partir de los documentos oficiales de `docs/`. No lo edites a mano:
> los cambios se pierden la proxima vez que se regenere -- edita el
> documento fuente correspondiente y volve a correr el script.
>
> Generado el: {fecha}

## Instrucciones para quien pegue esto en un asistente de IA

Pega este archivo completo en el system prompt, las "custom
instructions", un archivo de contexto de proyecto, o el primer mensaje
de la conversacion, ANTES de pedirle código a la IA. A partir de ahi,
pedile código SiPi con normalidad ("escribime un programa SiPi que...").

Si el asistente tiene herramientas para leer archivos (Claude Code,
Cursor, etc.), tambien podes simplemente decirle "leé docs/AI_GUIDE.md,
docs/SYNTAX.md y docs/FUNCTIONS.md antes de escribir código SiPi" en
vez de pegar este archivo entero.

---

"""


def generar():
    partes = [ENCABEZADO.format(fecha=datetime.datetime.now().strftime("%Y-%m-%d"))]
    for nombre in ARCHIVOS_FUENTE:
        ruta = os.path.join(RUTA_DOCS, nombre)
        if not os.path.exists(ruta):
            print(f"[aviso] No encontre {nombre}, lo salteo.")
            continue
        with open(ruta, "r", encoding="utf-8") as f:
            contenido = f.read()
        partes.append(f"\n\n<!-- ===== FUENTE: docs/{nombre} ===== -->\n\n")
        partes.append(contenido)

    resultado = "".join(partes)
    ruta_salida = os.path.join(RUTA_DOCS, "CONTEXTO_IA_COMPLETO.md")
    with open(ruta_salida, "w", encoding="utf-8") as f:
        f.write(resultado)
    print(f"[SiPi] Contexto para IA generado: {ruta_salida} ({len(resultado)} caracteres, "
          f"~{len(resultado)//4} tokens aproximados)")
    return ruta_salida


if __name__ == "__main__":
    generar()
