"""MCP local de lectura. Python 3.10+, pip install mcp==1.30.0.
Ejemplo de SDK v1 fijado: mcp 2.x renombra FastMCP y requiere migración.
python3 servidor_mcp.py --crear-demo crea una DB nueva junto al script.
python3 servidor_mcp.py inicia stdio; no expone un puerto HTTP.
"""
from datetime import date
from pathlib import Path
import sqlite3
import sys
from mcp.server.fastmcp import FastMCP

DB = Path(__file__).resolve().with_name("ventas-demo.db")
mcp = FastMCP("ventas-demo")


def crear_demo():
    # O_EXCL: no reemplazar una base que ya existe.
    with DB.open("xb"):
        pass
    conn = sqlite3.connect(DB)
    try:
        conn.execute("CREATE TABLE ventas (fecha TEXT, producto TEXT, centavos INTEGER)")
        conn.executemany("INSERT INTO ventas VALUES (?, ?, ?)", [
            ("2026-09-01", "A-100", 1250), ("2026-09-01", "B-200", 500),
        ])
        conn.commit()
    finally:
        conn.close()


@mcp.tool()
def ventas_por_dia(fecha: str) -> list[dict]:
    """Lee hasta 100 ventas ficticias de una fecha ISO YYYY-MM-DD. No escribe ni ejecuta SQL libre."""
    if date.fromisoformat(fecha).isoformat() != fecha:
        raise ValueError("Usa YYYY-MM-DD")
    conn = sqlite3.connect(DB.as_uri() + "?mode=ro", uri=True)
    try:
        rows = conn.execute(
            "SELECT producto, centavos FROM ventas WHERE fecha = ? ORDER BY rowid LIMIT 100",
            (fecha,),
        ).fetchall()
        return [{"producto": producto, "centavos": centavos} for producto, centavos in rows]
    finally:
        conn.close()


@mcp.resource("esquema://ventas")
def esquema_ventas() -> str:
    return "ventas(fecha TEXT ISO, producto TEXT, centavos INTEGER); datos ficticios; máximo 100 filas"


if __name__ == "__main__":
    if sys.argv[1:] == ["--crear-demo"]:
        crear_demo()
        print("Base ficticia creada; no volver a ejecutar sobre una base existente.")
    elif sys.argv[1:]:
        raise SystemExit("Usa --crear-demo o inicia sin argumentos")
    else:
        mcp.run(transport="stdio")
