<?php
/**
 * @intranet-file common/sectores_db.php
 * @intranet-file-version 2026.03.13.1
 * @intranet-file-date 2026-03-13
 * @intranet-file-owner CSIF Intranet
 */
declare(strict_types=1);

/**
 * Sectores (tabla común en toda la intranet)
 *
 * Tabla objetivo: sectores
 * Compatibilidad: si existe flota_sectores y no existe sectores, intenta renombrar.
 */

require_once __DIR__ . '/db.php';


function sectores_has_column(PDO $pdo, string $table, string $column): bool
{
    $st = $pdo->prepare("SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = :t AND COLUMN_NAME = :c");
    $st->execute(['t' => $table, 'c' => $column]);
    return ((int)$st->fetchColumn() > 0);
}

function sectores_table_exists(PDO $pdo, string $table): bool
{
    $st = $pdo->prepare("SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = :t");
    $st->execute(['t' => $table]);
    return ((int)$st->fetchColumn() > 0);
}

/**
 * Asegura que exista la tabla `sectores` y un seed mínimo.
 * No rompe si faltan permisos para RENAME/CREATE.
 */
function sectores_ensure_schema(PDO $pdo): void
{
    static $done = false;
    if ($done) return;

    // Si ya existe sectores, listo
    try {
        $pdo->query("SELECT 1 FROM sectores LIMIT 1");
        $done = true;
    } catch (Throwable $e) {
        // continuar
    }

    // Si no existe sectores pero existe flota_sectores, intentar renombrar
    if (!$done) {
        try {
            if (!sectores_table_exists($pdo, 'sectores') && sectores_table_exists($pdo, 'flota_sectores')) {
                $pdo->exec("RENAME TABLE flota_sectores TO sectores");
            }
        } catch (Throwable $e) {
            // sin permisos o ya existe: ignorar
        }

        // Crear tabla si sigue sin existir
        if (!sectores_table_exists($pdo, 'sectores')) {
            $pdo->exec(
                "CREATE TABLE IF NOT EXISTS sectores (\n".
                "  id INT AUTO_INCREMENT PRIMARY KEY,\n".
                "  nombre VARCHAR(150) NOT NULL,\n".
                "  color_hex CHAR(7) NULL,\n".
                "  activo TINYINT(1) NOT NULL DEFAULT 1,\n".
                "  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n".
                "  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n".
                "  UNIQUE KEY uq_nombre (nombre),\n".
                "  INDEX idx_activo (activo)\n".
                ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"
            );
        }


        // Asegurar columna email (migración ligera)
        try {
            if (!sectores_has_column($pdo, 'sectores', 'email')) {
                $pdo->exec("ALTER TABLE sectores ADD COLUMN email VARCHAR(255) NULL");
            }
        } catch (Throwable $e) {
            // ignorar
        }

        $done = true;
    }

}

/**
 * @return array<int, array{id:int,nombre:string,color_hex:?string,activo:int}>
 */
function sectores_fetch(PDO $pdo, bool $onlyActive = true): array
{
    sectores_ensure_schema($pdo);

    $sql = "SELECT id, nombre, email, color_hex, activo FROM sectores";
    if ($onlyActive) $sql .= " WHERE activo = 1";
    $sql .= " ORDER BY nombre ASC";

    $st = $pdo->query($sql);
    $rows = $st->fetchAll(PDO::FETCH_ASSOC) ?: [];

    $out = [];
    foreach ($rows as $r) {
        $out[] = [
            'id' => (int)($r['id'] ?? 0),
            'nombre' => (string)($r['nombre'] ?? ''),
            'email' => (string)($r['email'] ?? ''),
            'color_hex' => isset($r['color_hex']) ? (string)$r['color_hex'] : null,
            'activo' => (int)($r['activo'] ?? 0),
        ];
    }
    return $out;
}

/**
 * Genera HTML <option> para selects basados en nombre.
 */
function sectores_options_html(array $sectores, ?string $selectedNombre = null): string
{
    $selectedNombre = $selectedNombre !== null ? (string)$selectedNombre : null;
    $html = '';
    foreach ($sectores as $s) {
        $nombre = (string)($s['nombre'] ?? '');
        if ($nombre === '') continue;
        $sel = ($selectedNombre !== null && $nombre === $selectedNombre) ? ' selected' : '';
        $html .= '<option value="' . htmlspecialchars($nombre, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') . '"' . $sel . '>';
        $html .= htmlspecialchars($nombre, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
        $html .= "</option>\n";
    }
    return $html;
}
