/*
======================================================================
G&S GOLD TRAVEL - PaginaWeb4.0
INSTALADOR MAESTRO V5.0 - INSTALACIÓN LIMPIA PARA PRUEBAS
======================================================================

OBJETIVO
--------
Este archivo instala la estructura de la aplicación desde una base de
datos NUEVA y VACÍA.

V5.0 es una versión de laboratorio para comprobar que podemos entrar al
sistema y diseñar una web completamente desde cero mediante el Editor
Visual.

IMPORTANTE
----------
- Este es el ÚNICO archivo SQL de esta V5.0.
- La V4.0 conserva todos los scripts históricos y no se modifica.
- Ejecutar este archivo solamente sobre una base de datos nueva/vacía.
- No incluye contenido de una web anterior.
- No incluye usuarios administradores.
- No incluye páginas creadas.
- No incluye menús creados.
- No incluye paleta de colores precargada.
- No incluye tipografías precargadas.
- No incluye galerías ni imágenes.
- No incluye carruseles.
- No incluye botones.
- No incluye contenido editorial.
- No incluye columnas/elementos de pie de página de una web concreta.

SÍ incluye:
- Tablas y estructura completa.
- Claves primarias e índices.
- Relaciones/FK necesarias.
- Estructura del Constructor.
- Componentes reconocidos por el Editor Visual.
- Estructura completa de carruseles y botones.
- Configuraciones técnicas necesarias para que el sistema pueda empezar
  a trabajar.
- Los mínimos registros técnicos que la aplicación actual necesita.

DATOS PREINSTALADOS INTENCIONALMENTE
-------------------------------------
1. Categoría "General": necesaria para poder crear páginas inmediatamente.
2. Registro técnico de cabecera/logo: necesario para que el módulo Cabecera
   tenga un registro inicial editable.
3. Catálogo de componentes visuales: son tipos de componentes del sistema,
   no contenido de la web.

TODO LO DEMÁS QUEDA VACÍO PARA SER DISEÑADO DESDE EL EDITOR VISUAL.

NOTA
----
Los scripts 020 y 021 de la V4.0 son correcciones visuales/código y no
agregan estructura que deba instalarse en una BD nueva.

======================================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

/* ================================================================
   001_Usuarios_PARTE_1.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
001_Usuarios.sql
ESTRUCTURA LIMPIA
*/
SET NAMES utf8mb4;

CREATE TABLE usuarios (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    usuario VARCHAR(50) NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    nombre VARCHAR(100) NOT NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    ultimo_acceso DATETIME NULL,
    PRIMARY KEY (id),
    UNIQUE KEY uk_usuarios_usuario (usuario)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   002_Seguridad_PARTE_1.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
002_Seguridad.sql
ESTRUCTURA LIMPIA
*/
SET NAMES utf8mb4;

CREATE TABLE login_intentos (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    ip VARCHAR(45) NOT NULL,
    usuario VARCHAR(50) NOT NULL,
    fecha_intento DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    KEY idx_login_ip_fecha (ip, fecha_intento),
    KEY idx_login_usuario_fecha (usuario, fecha_intento)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   003_Contacto_PARTE_1.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
003_Contacto.sql
ESTRUCTURA LIMPIA
*/
SET NAMES utf8mb4;

CREATE TABLE telefonos (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    telefono VARCHAR(30) NOT NULL,
    orden INT UNSIGNED NOT NULL DEFAULT 1,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE correos (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    correo VARCHAR(150) NOT NULL,
    orden INT UNSIGNED NOT NULL DEFAULT 1,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE direccion (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    direccion VARCHAR(255) NOT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE redes_sociales (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    nombre VARCHAR(50) NOT NULL,
    icono VARCHAR(255) NOT NULL,
    url VARCHAR(500) NOT NULL,
    orden INT UNSIGNED NOT NULL DEFAULT 1,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   004_PaletaColores_PARTE_1.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
004_PaletaColores.sql
ESTRUCTURA LIMPIA
*/
SET NAMES utf8mb4;

CREATE TABLE paleta_colores (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    clave VARCHAR(100) NOT NULL,
    nombre VARCHAR(100) NOT NULL,
    valor_rgb VARCHAR(50) NOT NULL,
    valor_rgba VARCHAR(60) NOT NULL,
    uso VARCHAR(255) NULL,
    orden INT UNSIGNED NOT NULL DEFAULT 1,
    activo TINYINT(1) NOT NULL DEFAULT 1,
    creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    actualizado_en DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_paleta_colores_clave (clave),
    KEY idx_paleta_colores_orden (orden),
    KEY idx_paleta_colores_activo (activo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   005_Tipografias_PARTE_1.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
005_Tipografias.sql
ESTRUCTURA LIMPIA
*/
SET NAMES utf8mb4;

CREATE TABLE tipografias (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    clave VARCHAR(100) NOT NULL,
    nombre VARCHAR(255) NOT NULL,
    familia_css VARCHAR(1000) NOT NULL,
    origen VARCHAR(100) NOT NULL DEFAULT 'Google Fonts',
    url_fuente TEXT NOT NULL,
    orden INT NOT NULL DEFAULT 1,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uk_tipografias_clave (clave),
    KEY idx_tipografias_orden (orden),
    KEY idx_tipografias_estado (estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   006_Paginas_PARTE_1.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
006_Paginas.sql
ESTRUCTURA LIMPIA
*/
SET NAMES utf8mb4;

CREATE TABLE pagina_categorias (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    nombre VARCHAR(100) NOT NULL,
    slug VARCHAR(120) NOT NULL,
    orden INT UNSIGNED NOT NULL DEFAULT 1,
    activo TINYINT(1) NOT NULL DEFAULT 1,
    PRIMARY KEY (id),
    UNIQUE KEY uq_pagina_categorias_slug (slug)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE paginas (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    categoria_id INT UNSIGNED NULL,
    nombre VARCHAR(150) NOT NULL,
    slug VARCHAR(180) NOT NULL,
    titulo VARCHAR(200) NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    es_inicio TINYINT(1) NOT NULL DEFAULT 0,
    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_paginas_slug (slug),
    KEY idx_paginas_inicio (es_inicio),
    KEY idx_paginas_categoria (categoria_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   007_Cabecera_PARTE_1.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
007_Cabecera.sql
ESTRUCTURA LIMPIA
*/
SET NAMES utf8mb4;

CREATE TABLE cabecera (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    logo VARCHAR(255) NOT NULL,
    destino_tipo ENUM('pagina','externo') NOT NULL DEFAULT 'pagina',
    pagina_id INT UNSIGNED NULL,
    enlace VARCHAR(500) NULL,
    PRIMARY KEY (id),
    KEY idx_cabecera_pagina (pagina_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   008_Menu_PARTE_1.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
008_Menu.sql
ESTRUCTURA LIMPIA
*/
SET NAMES utf8mb4;

CREATE TABLE menu (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    nombre VARCHAR(100) NOT NULL,
    destino_tipo ENUM('ninguno','pagina','externo') NOT NULL DEFAULT 'pagina',
    pagina_id INT UNSIGNED NULL,
    url VARCHAR(500) NULL,
    parent_id INT UNSIGNED NULL,
    orden INT UNSIGNED NOT NULL DEFAULT 1,
    PRIMARY KEY (id),
    KEY idx_menu_pagina (pagina_id),
    KEY idx_menu_parent (parent_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   009_CREAR_PIE_DEFINITIVO.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
======================================================================
G&S GOLD TRAVEL - PaginaWeb4.0
009_Pie.sql
MÓDULO PIE - ESTRUCTURA DEFINITIVA
======================================================================
IMPORTANTE:
- Este es el único script para CREAR el módulo Pie.
- No crea ni modifica ninguna otra tabla.
- Los colores se guardan como CLAVES de paleta_colores.
- Las tipografías se guardan como CLAVES de tipografias.
- nombre_interno es SOLO administrativo y NUNCA se imprime en la web.
- En la web se imprime el TITULO de cada columna y sus CONTENIDOS.
- Título y contenido tienen estilos totalmente independientes.
======================================================================
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;









SET FOREIGN_KEY_CHECKS = 1;

CREATE TABLE pie_configuracion (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,

    /* ESTRUCTURA GENERAL */
    color_fondo_clave VARCHAR(100) NULL,
    color_texto_clave VARCHAR(100) NULL,
    tipografia_clave VARCHAR(100) NULL,

    separacion_columnas_px INT UNSIGNED NOT NULL DEFAULT 45,
    espacio_superior_px INT UNSIGNED NOT NULL DEFAULT 38,
    espacio_inferior_px INT UNSIGNED NOT NULL DEFAULT 34,
    ancho_maximo_px INT UNSIGNED NOT NULL DEFAULT 1200,
    padding_horizontal_px INT UNSIGNED NOT NULL DEFAULT 20,

    /* TÍTULO DE CADA COLUMNA */
    titulo_color_clave VARCHAR(100) NULL,
    titulo_tipografia_clave VARCHAR(100) NULL,
    titulo_tamano_px INT UNSIGNED NOT NULL DEFAULT 22,
    titulo_peso SMALLINT UNSIGNED NOT NULL DEFAULT 700,
    titulo_espacio_px INT UNSIGNED NOT NULL DEFAULT 22,
    titulo_linea_ancho_px INT UNSIGNED NOT NULL DEFAULT 72,
    titulo_linea_alto_px INT UNSIGNED NOT NULL DEFAULT 3,
    titulo_linea_color_clave VARCHAR(100) NULL,

    /* CONTENIDO DE LAS COLUMNAS */
    contenido_color_clave VARCHAR(100) NULL,
    contenido_tipografia_clave VARCHAR(100) NULL,
    contenido_tamano_px INT UNSIGNED NOT NULL DEFAULT 16,
    contenido_peso SMALLINT UNSIGNED NOT NULL DEFAULT 400,
    contenido_espacio_px INT UNSIGNED NOT NULL DEFAULT 12,
    contenido_interlineado DECIMAL(4,2) NOT NULL DEFAULT 1.50,
    contenido_alineacion ENUM('left','center','right','justify')
        NOT NULL DEFAULT 'left',

    /* BORDE SUPERIOR */
    borde_superior_ancho_px INT UNSIGNED NOT NULL DEFAULT 5,
    borde_superior_color_clave VARCHAR(100) NULL,
    borde_superior_estilo ENUM(
        'none','solid','dashed','dotted','double'
    ) NOT NULL DEFAULT 'solid',

    /* BORDE INFERIOR */
    borde_inferior_ancho_px INT UNSIGNED NOT NULL DEFAULT 0,
    borde_inferior_color_clave VARCHAR(100) NULL,
    borde_inferior_estilo ENUM(
        'none','solid','dashed','dotted','double'
    ) NOT NULL DEFAULT 'solid',

    /* APARIENCIA */
    radio_px INT UNSIGNED NOT NULL DEFAULT 0,
    sombra_css VARCHAR(500) NULL,

    activo TINYINT(1) NOT NULL DEFAULT 1,

    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
        ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (id)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


CREATE TABLE pie_columnas (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,

    /* SOLO PARA EL ADMINISTRADOR */
    numero TINYINT UNSIGNED NOT NULL,
    nombre_interno VARCHAR(150) NOT NULL,

    /* ESTO SÍ SE MUESTRA EN LA WEB */
    titulo VARCHAR(255) NOT NULL,

    orden TINYINT UNSIGNED NOT NULL DEFAULT 1,
    ancho_fraccion DECIMAL(6,3) NOT NULL DEFAULT 1.000,
    activo TINYINT(1) NOT NULL DEFAULT 1,

    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
        ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (id),
    UNIQUE KEY uq_pie_columnas_numero (numero),
    KEY idx_pie_columnas_orden (orden),
    KEY idx_pie_columnas_activo (activo)

) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;



/*
======================================================================
APARIENCIA INDIVIDUAL DE CADA COLUMNA
======================================================================
La apariencia general está en pie_configuracion.
La apariencia específica de cada columna está aquí.
======================================================================
*/
CREATE TABLE pie_columnas_estilos (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    columna_id INT UNSIGNED NOT NULL,

    color_fondo_clave VARCHAR(100) NULL,
    color_texto_clave VARCHAR(100) NULL,
    tipografia_clave VARCHAR(100) NULL,

    titulo_color_clave VARCHAR(100) NULL,
    titulo_tipografia_clave VARCHAR(100) NULL,
    titulo_tamano_px SMALLINT UNSIGNED NOT NULL DEFAULT 22,
    titulo_peso SMALLINT UNSIGNED NOT NULL DEFAULT 700,
    titulo_alineacion ENUM('left','center','right') NOT NULL DEFAULT 'left',
    titulo_espacio_px SMALLINT UNSIGNED NOT NULL DEFAULT 22,
    titulo_linea_ancho_px SMALLINT UNSIGNED NOT NULL DEFAULT 72,
    titulo_linea_alto_px SMALLINT UNSIGNED NOT NULL DEFAULT 3,
    titulo_linea_color_clave VARCHAR(100) NULL,

    contenido_color_clave VARCHAR(100) NULL,
    contenido_tipografia_clave VARCHAR(100) NULL,
    contenido_tamano_px SMALLINT UNSIGNED NOT NULL DEFAULT 16,
    contenido_peso SMALLINT UNSIGNED NOT NULL DEFAULT 400,
    contenido_interlineado DECIMAL(4,2) NOT NULL DEFAULT 1.50,
    contenido_alineacion ENUM('left','center','right','justify') NOT NULL DEFAULT 'justify',

    padding_superior_px SMALLINT UNSIGNED NOT NULL DEFAULT 0,
    padding_inferior_px SMALLINT UNSIGNED NOT NULL DEFAULT 0,
    padding_izquierdo_px SMALLINT UNSIGNED NOT NULL DEFAULT 0,
    padding_derecho_px SMALLINT UNSIGNED NOT NULL DEFAULT 0,

    borde_ancho_px SMALLINT UNSIGNED NOT NULL DEFAULT 0,
    borde_color_clave VARCHAR(100) NULL,
    borde_estilo ENUM('none','solid','dashed','dotted','double') NOT NULL DEFAULT 'none',
    radio_px SMALLINT UNSIGNED NOT NULL DEFAULT 0,
    sombra_css VARCHAR(500) NULL,

    PRIMARY KEY (id),
    UNIQUE KEY uq_pie_columna_estilo (columna_id),
    CONSTRAINT fk_pie_columnas_estilos_columna
        FOREIGN KEY (columna_id)
        REFERENCES pie_columnas(id)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


/*
======================================================================
REGLAS DE TIPOS POR COLUMNA
======================================================================
La columna determina qué formularios puede utilizar el administrador.

1 = Texto
2 = Información (texto + icono)
3 = Enlace
4 = Texto / Imagen / Libro de reclamaciones

No se permite seleccionar un tipo que no pertenezca a la columna.
======================================================================
*/
CREATE TABLE pie_columna_tipos (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    columna_id INT UNSIGNED NOT NULL,
    tipo VARCHAR(50) NOT NULL,
    orden TINYINT UNSIGNED NOT NULL DEFAULT 1,
    activo TINYINT(1) NOT NULL DEFAULT 1,
    PRIMARY KEY (id),
    UNIQUE KEY uq_pie_columna_tipo (columna_id, tipo),
    KEY idx_pie_columna_tipos_columna (columna_id),
    CONSTRAINT fk_pie_columna_tipos_columna
        FOREIGN KEY (columna_id)
        REFERENCES pie_columnas(id)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


CREATE TABLE pie_elementos (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,

    columna_id INT UNSIGNED NOT NULL,

    /*
    texto       = texto normal
    informacion = información con icono
    enlace      = enlace
    icono_enlace= icono + enlace
    imagen      = imagen
    libro_reclamaciones = elemento especial
    */
    tipo VARCHAR(50) NOT NULL DEFAULT 'texto',

    /* TÍTULO DEL ELEMENTO, SI CORRESPONDE */
    titulo VARCHAR(255) NULL,

    /* CONTENIDO DEL ELEMENTO */
    contenido MEDIUMTEXT NULL,

    /* RECURSOS */
    icono_ruta VARCHAR(500) NULL,
    imagen_ruta VARCHAR(500) NULL,

    /* ENLACES */
    destino_tipo ENUM(
        'ninguno',
        'pagina',
        'externo'
    ) NOT NULL DEFAULT 'ninguno',
    url VARCHAR(1000) NULL,
    pagina_id INT UNSIGNED NULL,
    abrir_nueva_pestana TINYINT(1) NOT NULL DEFAULT 0,

    orden INT UNSIGNED NOT NULL DEFAULT 1,
    activo TINYINT(1) NOT NULL DEFAULT 1,

    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
        ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (id),
    KEY idx_pie_elementos_columna (columna_id),
    KEY idx_pie_elementos_tipo (tipo),
    KEY idx_pie_elementos_orden (columna_id, orden),
    KEY idx_pie_elementos_activo (activo),

    CONSTRAINT fk_pie_elementos_columna
        FOREIGN KEY (columna_id)
        REFERENCES pie_columnas(id)
        ON DELETE CASCADE
        ON UPDATE CASCADE

) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


CREATE TABLE pie_elementos_estilos (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,

    elemento_id INT UNSIGNED NOT NULL,

    /* COLOR Y TIPOGRAFÍA */
    color_clave VARCHAR(100) NULL,
    tipografia_clave VARCHAR(100) NULL,
    tamano_px INT UNSIGNED NULL,
    peso SMALLINT UNSIGNED NULL,
    interlineado DECIMAL(4,2) NULL,

    /* ESPACIADO */
    margen_superior_px INT NULL DEFAULT 0,
    margen_derecho_px INT NULL DEFAULT 0,
    margen_inferior_px INT NULL DEFAULT 0,
    margen_izquierdo_px INT NULL DEFAULT 0,

    padding_superior_px INT NULL DEFAULT 0,
    padding_derecho_px INT NULL DEFAULT 0,
    padding_inferior_px INT NULL DEFAULT 0,
    padding_izquierdo_px INT NULL DEFAULT 0,

    /* ALINEACIÓN */
    alineacion ENUM(
        'left','center','right','justify'
    ) NULL,

    /* IMÁGENES / ICONOS */
    ancho_px INT UNSIGNED NULL,
    alto_px INT UNSIGNED NULL,
    radio_px INT UNSIGNED NULL,
    objeto_ajuste ENUM(
        'contain','cover','fill','none','scale-down'
    ) NULL,

    /* BORDE */
    borde_ancho_px INT UNSIGNED NULL,
    borde_color_clave VARCHAR(100) NULL,
    borde_estilo ENUM(
        'none','solid','dashed','dotted','double'
    ) NULL,

    /* VISUAL */
    opacidad DECIMAL(3,2) NULL,
    sombra_css VARCHAR(500) NULL,

    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
        ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (id),
    UNIQUE KEY uq_pie_elementos_estilos_elemento (elemento_id),

    CONSTRAINT fk_pie_elementos_estilos_elemento
        FOREIGN KEY (elemento_id)
        REFERENCES pie_elementos(id)
        ON DELETE CASCADE
        ON UPDATE CASCADE

) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


CREATE TABLE pie_copyright (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,

    texto VARCHAR(500) NOT NULL DEFAULT '',
    mostrar_anio TINYINT(1) NOT NULL DEFAULT 0,

    color_fondo_clave VARCHAR(100) NULL,
    color_texto_clave VARCHAR(100) NULL,
    tipografia_clave VARCHAR(100) NULL,

    tamano_texto_px INT UNSIGNED NOT NULL DEFAULT 14,
    peso_texto SMALLINT UNSIGNED NOT NULL DEFAULT 400,

    padding_superior_px INT UNSIGNED NOT NULL DEFAULT 18,
    padding_inferior_px INT UNSIGNED NOT NULL DEFAULT 18,

    borde_superior_ancho_px INT UNSIGNED NOT NULL DEFAULT 1,
    borde_superior_color_clave VARCHAR(100) NULL,
    borde_superior_estilo ENUM(
        'none','solid','dashed','dotted','double'
    ) NOT NULL DEFAULT 'solid',

    alineacion ENUM('left','center','right') NOT NULL DEFAULT 'center',

    activo TINYINT(1) NOT NULL DEFAULT 1,

    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
        ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (id)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   010_Constructor_PARTE_1.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
010_Constructor.sql
ESTRUCTURA LIMPIA
*/
SET NAMES utf8mb4;

CREATE TABLE pagina_secciones (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    pagina_id INT UNSIGNED NOT NULL,
    nombre VARCHAR(150) NULL,
    orden INT UNSIGNED NOT NULL DEFAULT 1,
    columnas TINYINT UNSIGNED NOT NULL DEFAULT 1,
    configuracion JSON NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    KEY idx_pagina_secciones_pagina (pagina_id),
    KEY idx_pagina_secciones_orden (pagina_id,orden)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   010_Constructor_PARTE_2.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
CREATE TABLE pagina_elementos (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    pagina_id INT UNSIGNED NOT NULL,
    seccion_id INT UNSIGNED NOT NULL,
    columna TINYINT UNSIGNED NOT NULL DEFAULT 1,
    orden INT UNSIGNED NOT NULL DEFAULT 1,
    tipo VARCHAR(50) NOT NULL,
    contenido LONGTEXT NULL,
    configuracion JSON NULL,
    destino_tipo ENUM('ninguno','pagina','externo') NOT NULL DEFAULT 'ninguno',
    destino_pagina_id INT UNSIGNED NULL,
    destino_url VARCHAR(1000) NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    KEY idx_pagina_elementos_pagina (pagina_id),
    KEY idx_pagina_elementos_seccion (seccion_id),
    KEY idx_pagina_elementos_orden (seccion_id,columna,orden),
    KEY idx_pagina_elementos_tipo (tipo),
    KEY idx_pagina_elementos_destino (destino_pagina_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   011_Relaciones_PARTE_1.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
011_Relaciones.sql
*/
SET NAMES utf8mb4;

ALTER TABLE paginas
    ADD CONSTRAINT fk_paginas_categoria
    FOREIGN KEY (categoria_id) REFERENCES pagina_categorias(id)
    ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE cabecera
    ADD CONSTRAINT fk_cabecera_pagina
    FOREIGN KEY (pagina_id) REFERENCES paginas(id)
    ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE menu
    ADD CONSTRAINT fk_menu_parent
    FOREIGN KEY (parent_id) REFERENCES menu(id)
    ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE menu
    ADD CONSTRAINT fk_menu_pagina
    FOREIGN KEY (pagina_id) REFERENCES paginas(id)
    ON DELETE SET NULL ON UPDATE CASCADE;


ALTER TABLE pagina_secciones
    ADD CONSTRAINT fk_pagina_secciones_pagina
    FOREIGN KEY (pagina_id) REFERENCES paginas(id)
    ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE pagina_elementos
    ADD CONSTRAINT fk_pagina_elementos_pagina
    FOREIGN KEY (pagina_id) REFERENCES paginas(id)
    ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE pagina_elementos
    ADD CONSTRAINT fk_pagina_elementos_seccion
    FOREIGN KEY (seccion_id) REFERENCES pagina_secciones(id)
    ON DELETE CASCADE ON UPDATE CASCADE;

/* ================================================================
   011_Relaciones_PARTE_2.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
ALTER TABLE pagina_elementos
    ADD CONSTRAINT fk_pagina_elementos_destino
    FOREIGN KEY (destino_pagina_id) REFERENCES paginas(id)
    ON DELETE SET NULL ON UPDATE CASCADE;

/* ================================================================
   012_CabeceraSuperior_PARTE_1.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
012_CabeceraSuperior.sql
ESTRUCTURA DEFINITIVA
*/
SET NAMES utf8mb4;

CREATE TABLE cabecera_superior_configuracion (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    color_fondo_clave VARCHAR(100) NULL,
    color_texto_clave VARCHAR(100) NULL,
    tipografia_clave VARCHAR(100) NULL,
    tamano_texto_px SMALLINT UNSIGNED NOT NULL DEFAULT 14,
    peso_texto SMALLINT UNSIGNED NOT NULL DEFAULT 400,
    altura_px SMALLINT UNSIGNED NOT NULL DEFAULT 50,
    espacio_elementos_px SMALLINT UNSIGNED NOT NULL DEFAULT 22,
    espacio_grupos_px SMALLINT UNSIGNED NOT NULL DEFAULT 8,
    padding_vertical_px SMALLINT UNSIGNED NOT NULL DEFAULT 0,
    tamano_icono_px SMALLINT UNSIGNED NOT NULL DEFAULT 16,
    ancho_maximo_px SMALLINT UNSIGNED NOT NULL DEFAULT 1200,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    KEY idx_cabecera_superior_estado (estado),
    KEY idx_cabecera_superior_fondo (color_fondo_clave),
    KEY idx_cabecera_superior_texto (color_texto_clave),
    KEY idx_cabecera_superior_tipografia (tipografia_clave)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   013_ComponentesVisuales_PARTE_1.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
013_ComponentesVisuales.sql
ESTRUCTURA DEFINITIVA

Todas las propiedades que el Editor Visual necesita quedan registradas
DIRECTAMENTE en la estructura inicial de la base de datos.
No depende de scripts de actualización posteriores.
*/
SET NAMES utf8mb4;

/* ================================================================
   013_ComponentesVisuales_PARTE_2.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
CREATE TABLE componentes_visuales (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    componente VARCHAR(100) NOT NULL,

    /* Configuración general */
    color_fondo_clave VARCHAR(100) NULL,
    color_texto_clave VARCHAR(100) NULL,
    color_hover_clave VARCHAR(100) NULL,
    tipografia_clave VARCHAR(100) NULL,

    /* Título independiente */
    titulo_color_clave VARCHAR(100) NULL,
    titulo_tipografia_clave VARCHAR(100) NULL,
    titulo_tamano_px SMALLINT UNSIGNED NULL,
    titulo_peso SMALLINT UNSIGNED NULL,
    titulo_espacio_px SMALLINT UNSIGNED NULL,

    /* Contenido independiente */
    contenido_color_clave VARCHAR(100) NULL,
    contenido_tipografia_clave VARCHAR(100) NULL,
    contenido_tamano_px SMALLINT UNSIGNED NULL,
    contenido_peso SMALLINT UNSIGNED NULL,
    contenido_espacio_px SMALLINT UNSIGNED NULL,

    /* Texto / iconos / dimensiones */
    tamano_texto_px SMALLINT UNSIGNED NULL,
    peso_texto SMALLINT UNSIGNED NULL,
    tamano_icono_px SMALLINT UNSIGNED NULL,
    ancho_logo_px SMALLINT UNSIGNED NULL,
    alto_logo_px SMALLINT UNSIGNED NULL,
    espacio_px SMALLINT UNSIGNED NULL,
    padding_px SMALLINT UNSIGNED NULL,
    radio_px SMALLINT UNSIGNED NULL,

    /* Borde superior del componente */
    borde_superior_ancho_px SMALLINT UNSIGNED NULL,
    borde_superior_color_clave VARCHAR(100) NULL,
    borde_superior_estilo VARCHAR(20) NULL,

    /* Borde inferior del componente */
    borde_inferior_ancho_px SMALLINT UNSIGNED NULL,
    borde_inferior_color_clave VARCHAR(100) NULL,
    borde_inferior_estilo VARCHAR(20) NULL,
    borde_inferior_radio_px SMALLINT UNSIGNED NULL,

    sombra VARCHAR(255) NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (id),
    UNIQUE KEY uk_componentes_visuales_componente (componente),
    KEY idx_componentes_visuales_estado (estado),
    KEY idx_componentes_visuales_fondo (color_fondo_clave),
    KEY idx_componentes_visuales_texto (color_texto_clave),
    KEY idx_componentes_visuales_tipografia (tipografia_clave)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   013_ComponentesVisuales_PARTE_3.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/* Componentes reconocidos por el Editor Visual. Se crean sin imponer
   colores ni tipografías: esos valores los decide el editor. */

/* ================================================================
   014_Carruseles.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
014_Carruseles.sql

Carruseles reutilizables del Editor Visual.
No limita artificialmente la cantidad de imágenes por carrusel.
Las imágenes se referencian por el ID de la galería central.
*/

SET NAMES utf8mb4;

CREATE TABLE carruseles (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    nombre VARCHAR(160) NOT NULL,
    tipo VARCHAR(40) NOT NULL,
    descripcion VARCHAR(500) NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    autoplay TINYINT(1) NOT NULL DEFAULT 0,
    velocidad_ms INT UNSIGNED NOT NULL DEFAULT 5000,
    pausa_hover TINYINT(1) NOT NULL DEFAULT 1,
    direccion VARCHAR(20) NOT NULL DEFAULT 'normal',
    mostrar_flechas TINYINT(1) NOT NULL DEFAULT 1,
    mostrar_indicadores TINYINT(1) NOT NULL DEFAULT 1,
    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    KEY idx_carruseles_tipo (tipo),
    KEY idx_carruseles_estado (estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE carrusel_elementos (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    carrusel_id INT UNSIGNED NOT NULL,
    imagen_id VARCHAR(64) NOT NULL,
    titulo VARCHAR(255) NULL,
    descripcion TEXT NULL,
    texto_boton VARCHAR(160) NULL,
    url VARCHAR(1000) NULL,
    abrir_nueva_pestana TINYINT(1) NOT NULL DEFAULT 0,
    orden INT UNSIGNED NOT NULL DEFAULT 0,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    KEY idx_carrusel_elementos_carrusel (carrusel_id),
    KEY idx_carrusel_elementos_orden (carrusel_id, orden),
    CONSTRAINT fk_carrusel_elementos_carrusel
        FOREIGN KEY (carrusel_id) REFERENCES carruseles(id)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* ================================================================
   015_Carruseles_Apariencia.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
015_Carruseles_Apariencia.sql

Configuración visual de los carruseles:
- Alto visible.
- Color de flechas.
- Color de indicadores.

También normaliza los carruseles existentes para que las flechas
e indicadores estén activos por defecto.
*/

SET NAMES utf8mb4;

SET @sql = (
    SELECT IF(
        COUNT(*) = 0,
        'ALTER TABLE carruseles ADD COLUMN alto_px INT UNSIGNED NOT NULL DEFAULT 520 AFTER direccion',
        'SELECT 1'
    )
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'carruseles'
      AND COLUMN_NAME = 'alto_px'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET @sql = (
    SELECT IF(
        COUNT(*) = 0,
        'ALTER TABLE carruseles ADD COLUMN color_flecha VARCHAR(7) NOT NULL DEFAULT ''#FFFFFF'' AFTER alto_px',
        'SELECT 1'
    )
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'carruseles'
      AND COLUMN_NAME = 'color_flecha'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET @sql = (
    SELECT IF(
        COUNT(*) = 0,
        'ALTER TABLE carruseles ADD COLUMN color_indicador VARCHAR(7) NOT NULL DEFAULT ''#FFFFFF'' AFTER color_flecha',
        'SELECT 1'
    )
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'carruseles'
      AND COLUMN_NAME = 'color_indicador'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

/* ================================================================
   016_Carruseles_Identidad_Visual.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
016_Carruseles_Identidad_Visual.sql

Identidad visual de los carruseles.
Los colores y tipografías se almacenan como CLAVES
de las tablas oficiales de paleta_colores y tipografias.

No se permiten colores ni tipografías libres dentro del carrusel.
"transparente" es la única opción especial permitida para fondos
que deban ser transparentes.
*/

SET NAMES utf8mb4;

SET @sql = (
    SELECT IF(
        COUNT(*) = 0,
        'ALTER TABLE carruseles ADD COLUMN color_flecha_clave VARCHAR(100) NULL AFTER color_flecha',
        'SELECT 1'
    )
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'carruseles'
      AND COLUMN_NAME = 'color_flecha_clave'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET @sql = (
    SELECT IF(
        COUNT(*) = 0,
        'ALTER TABLE carruseles ADD COLUMN color_indicador_clave VARCHAR(100) NULL AFTER color_indicador',
        'SELECT 1'
    )
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'carruseles'
      AND COLUMN_NAME = 'color_indicador_clave'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET @sql = (
    SELECT IF(
        COUNT(*) = 0,
        'ALTER TABLE carruseles ADD COLUMN tipografia_clave VARCHAR(100) NULL AFTER color_indicador_clave',
        'SELECT 1'
    )
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'carruseles'
      AND COLUMN_NAME = 'tipografia_clave'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

/*
Los carruseles existentes conservan visualmente el blanco cuando
la paleta contiene una clave "texto_principal". Si esa clave no
existe, se deja NULL y el editor permitirá seleccionar una válida.
*/

/* ================================================================
   017_Carrusel_Elementos_Contenido_Visual.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
017_Carrusel_Elementos_Contenido_Visual.sql

Configuración individual de cada diapositiva:
- título: texto, tamaño, peso, alineación, color y tipografía
- descripción: texto, tamaño, color y tipografía
- botón opcional: texto, enlace, nueva pestaña, alineación,
  colores, tipografía, tamaño y dimensiones

Todos los colores y tipografías se guardan como CLAVES de las
tablas oficiales paleta_colores y tipografias.
*/

SET NAMES utf8mb4;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN titulo_color_clave VARCHAR(100) NULL AFTER titulo',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='titulo_color_clave'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN titulo_tipografia_clave VARCHAR(100) NULL AFTER titulo_color_clave',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='titulo_tipografia_clave'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN titulo_tamano_px INT UNSIGNED NOT NULL DEFAULT 48 AFTER titulo_tipografia_clave',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='titulo_tamano_px'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN titulo_peso VARCHAR(20) NOT NULL DEFAULT ''700'' AFTER titulo_tamano_px',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='titulo_peso'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN titulo_alineacion VARCHAR(20) NOT NULL DEFAULT ''centro'' AFTER titulo_peso',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='titulo_alineacion'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN descripcion_color_clave VARCHAR(100) NULL AFTER descripcion',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='descripcion_color_clave'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN descripcion_tipografia_clave VARCHAR(100) NULL AFTER descripcion_color_clave',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='descripcion_tipografia_clave'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN descripcion_tamano_px INT UNSIGNED NOT NULL DEFAULT 20 AFTER descripcion_tipografia_clave',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='descripcion_tamano_px'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN descripcion_alineacion VARCHAR(20) NOT NULL DEFAULT ''centro'' AFTER descripcion_tamano_px',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='descripcion_alineacion'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_activo TINYINT(1) NOT NULL DEFAULT 0 AFTER texto_boton',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='boton_activo'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_color_fondo_clave VARCHAR(100) NULL AFTER boton_activo',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='boton_color_fondo_clave'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_color_texto_clave VARCHAR(100) NULL AFTER boton_color_fondo_clave',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='boton_color_texto_clave'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_color_borde_clave VARCHAR(100) NULL AFTER boton_color_texto_clave',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='boton_color_borde_clave'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_tipografia_clave VARCHAR(100) NULL AFTER boton_color_borde_clave',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='boton_tipografia_clave'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_tamano_texto_px INT UNSIGNED NOT NULL DEFAULT 16 AFTER boton_tipografia_clave',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='boton_tamano_texto_px'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_ancho_px INT UNSIGNED NULL AFTER boton_tamano_texto_px',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='boton_ancho_px'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_alto_px INT UNSIGNED NULL AFTER boton_ancho_px',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='boton_alto_px'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_radio_px INT UNSIGNED NOT NULL DEFAULT 6 AFTER boton_alto_px',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='boton_radio_px'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_borde_px INT UNSIGNED NOT NULL DEFAULT 1 AFTER boton_radio_px',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='boton_borde_px'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_alineacion VARCHAR(20) NOT NULL DEFAULT ''centro'' AFTER boton_borde_px',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos'
 AND COLUMN_NAME='boton_alineacion'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

/* ================================================================
   018_Carruseles_Polarizado.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
018_Carruseles_Polarizado.sql

Añade una capa de polarizado configurable a cada carrusel.
No modifica las imágenes originales de la Galería.

- activo: 0/1
- intensidad: 0-100%
- color: clave de paleta oficial o "transparente"

La configuración pertenece al carrusel, por lo que cada instancia
puede decidir independientemente si utiliza el efecto.
*/

SET NAMES utf8mb4;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carruseles ADD COLUMN polarizado_activo TINYINT(1) NOT NULL DEFAULT 0 AFTER tipografia_clave',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE()
 AND TABLE_NAME='carruseles'
 AND COLUMN_NAME='polarizado_activo'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carruseles ADD COLUMN polarizado_intensidad TINYINT UNSIGNED NOT NULL DEFAULT 35 AFTER polarizado_activo',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE()
 AND TABLE_NAME='carruseles'
 AND COLUMN_NAME='polarizado_intensidad'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql = (
 SELECT IF(COUNT(*)=0,
 'ALTER TABLE carruseles ADD COLUMN polarizado_color_clave VARCHAR(100) NULL AFTER polarizado_intensidad',
 'SELECT 1')
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA=DATABASE()
 AND TABLE_NAME='carruseles'
 AND COLUMN_NAME='polarizado_color_clave'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

/* ================================================================
   019_Carrusel_Botones_Destinos_Tipos_Estilo.sql
   ESTRUCTURA INCORPORADA EN EL INSTALADOR V5.0
   ================================================================ */
/*
G&S GOLD TRAVEL - PaginaWeb4.0
019_Carrusel_Botones_Destinos_Tipos_Estilo.sql
Botones de carrusel: tipos, destino interno/externo, peso y estilo.
*/
SET NAMES utf8mb4;

SET @sql=(SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_tipo VARCHAR(30) NOT NULL DEFAULT ''principal'' AFTER boton_activo',
 'SELECT 1') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos' AND COLUMN_NAME='boton_tipo');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql=(SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_peso VARCHAR(20) NOT NULL DEFAULT ''700'' AFTER boton_tipografia_clave',
 'SELECT 1') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos' AND COLUMN_NAME='boton_peso');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql=(SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN boton_estilo VARCHAR(20) NOT NULL DEFAULT ''normal'' AFTER boton_peso',
 'SELECT 1') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos' AND COLUMN_NAME='boton_estilo');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql=(SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN destino_tipo VARCHAR(20) NOT NULL DEFAULT ''externo'' AFTER boton_alineacion',
 'SELECT 1') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos' AND COLUMN_NAME='destino_tipo');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql=(SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD COLUMN pagina_id INT UNSIGNED NULL AFTER destino_tipo',
 'SELECT 1') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos' AND COLUMN_NAME='pagina_id');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql=(SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD KEY idx_carrusel_elementos_pagina (pagina_id)',
 'SELECT 1') FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos' AND INDEX_NAME='idx_carrusel_elementos_pagina');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

SET @sql=(SELECT IF(COUNT(*)=0,
 'ALTER TABLE carrusel_elementos ADD CONSTRAINT fk_carrusel_elementos_pagina FOREIGN KEY (pagina_id) REFERENCES paginas(id) ON DELETE SET NULL ON UPDATE CASCADE',
 'SELECT 1') FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA=DATABASE() AND TABLE_NAME='carrusel_elementos' AND CONSTRAINT_NAME='fk_carrusel_elementos_pagina');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

/* ================================================================
   DATOS ESTRUCTURALES MÍNIMOS DE LA INSTALACIÓN
   ================================================================ */

/* Categoría base necesaria para crear páginas desde el administrador. */
INSERT INTO pagina_categorias (nombre, slug, orden, activo)
VALUES ('General', 'general', 1, 1);

/* Registro técnico de la cabecera/logo.
   El administrador podrá modificarlo desde el módulo Cabecera. */
INSERT INTO cabecera (logo, destino_tipo, pagina_id, enlace)
VALUES ('assets/img/logo/logo.png', 'pagina', NULL, NULL);

/*
   Componentes que el Editor Visual debe reconocer desde el primer inicio.
   Esto NO crea contenido de una web; solamente registra los tipos de
   componentes disponibles para el sistema.
*/
INSERT INTO componentes_visuales (componente, estado) VALUES
('cabecera_principal', 1),
('menu_principal', 1),
('submenu', 1),
('pie', 1),
('pie_copyright', 1),
('logo', 1),
('iconos_cabecera', 1),
('redes_sociales', 1),
('enlaces', 1),
('botones', 1);

/* ================================================================
   FINALIZACIÓN
   ================================================================ */
SET FOREIGN_KEY_CHECKS = 1;

/*
FIN DEL INSTALADOR MAESTRO V5.0

Después de ejecutar este archivo, la BD debe quedar preparada pero sin
contenido de una web concreta. El siguiente paso es entrar al sistema
y comenzar el diseño desde cero.
*/
