"""
ERGON Sprint 4.1 - Migration marca operadora en obras.

Agrega 4 columnas a `obras` para configurar branding de informes:
    marca_operador_nombre   — ej. "ERGON Platform" (default)
    marca_operador_slogan   — ej. "Fiscalizacion y gerencia de obra"
    marca_operador_logo_path — path relativo al blob (db/marca/{obra_id}/logo.png)
    marca_palette_accent    — hex de acento (default #D4B370 = bronce ERGON)

Decision arquitectonica: marca vive por obra porque distintas obras pueden
tener distintos operadores (un fiscalizador para una obra, otro para otra).

Idempotente: chequea si cada columna existe antes de agregarla.

Uso:
    python db/migrate_f_marca.py
"""
from __future__ import annotations

import os
import sqlite3
import sys
from pathlib import Path

HERE = Path(__file__).resolve().parent
DB_PATH = Path(os.environ.get("DATABASE_PATH") or (HERE / "ergon.db"))

COLUMNAS_NUEVAS = [
    ("marca_operador_nombre",   "TEXT NOT NULL DEFAULT 'ERGON Platform'"),
    ("marca_operador_slogan",   "TEXT"),
    ("marca_operador_logo_path", "TEXT"),
    ("marca_palette_accent",    "TEXT NOT NULL DEFAULT '#D4B370'"),
]


def columnas_existentes(conn: sqlite3.Connection, tabla: str) -> set[str]:
    rows = conn.execute(f"PRAGMA table_info({tabla})").fetchall()
    return {r[1] for r in rows}


def main() -> int:
    if not DB_PATH.exists():
        print(f"[ERROR] DB no existe: {DB_PATH}", file=sys.stderr)
        return 1
    conn = sqlite3.connect(str(DB_PATH))
    try:
        existentes = columnas_existentes(conn, "obras")
        agregadas = []
        for nombre, definicion in COLUMNAS_NUEVAS:
            if nombre in existentes:
                print(f"  [skip] columna '{nombre}' ya existe")
                continue
            conn.execute(f"ALTER TABLE obras ADD COLUMN {nombre} {definicion}")
            agregadas.append(nombre)
            print(f"  [add]  columna '{nombre}' agregada")
        conn.commit()
        print(f"  [migrate_f_marca] OK. {len(agregadas)} columna(s) nuevas, "
              f"{len(COLUMNAS_NUEVAS) - len(agregadas)} ya existian.")
        return 0
    except sqlite3.Error as e:
        print(f"[ERROR] migration fallo: {e}", file=sys.stderr)
        return 1
    finally:
        conn.close()


if __name__ == "__main__":
    sys.exit(main())
