-- =====================================================================
--  MÓDULO DE VOTACIONES EN VIVO — migración ADITIVA
--  No modifica ni elimina ninguna tabla existente. Solo crea tablas nuevas.
--  Ejecutar UNA vez en phpMyAdmin (pestaña SQL).
-- =====================================================================

-- Seleccionar la base de datos (evita el error #1046 "Base de datos no seleccionada").
-- Si tu base tuviera otro nombre, cámbialo aquí.
USE `re123_gigantes`;

-- ---------------------------------------------------------------------
-- Votaciones (cada "Vota por el más ___")
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `votaciones` (
  `id`                      INT(11) NOT NULL AUTO_INCREMENT,
  `codigo_publico`          VARCHAR(20) NOT NULL,
  `nombre`                  VARCHAR(255) NOT NULL,
  `estado`                  ENUM('borrador','esperando','activa','pausada','finalizada') NOT NULL DEFAULT 'borrador',
  `cantidad_ganadores`      INT(11) NOT NULL DEFAULT 3,
  `posiciones_visibles`     INT(11) NOT NULL DEFAULT 5,
  `orden_participantes`     ENUM('alfabetico','manual','aleatorio') NOT NULL DEFAULT 'alfabetico',
  `asistentes_estimados`    INT(11) NOT NULL DEFAULT 0,
  `mostrar_resultados_vivo` TINYINT(1) NOT NULL DEFAULT 0,  -- ranking visible en la página pública
  `mostrar_qr`              TINYINT(1) NOT NULL DEFAULT 1,   -- QR visible en pantalla externa
  `mostrar_resultados`      TINYINT(1) NOT NULL DEFAULT 0,   -- revelar resultados tras finalizar
  `mostrar_ganadores`       TINYINT(1) NOT NULL DEFAULT 0,   -- revelar ganadores en pantalla externa
  `ganador_revelado`        INT(11) NOT NULL DEFAULT 0,      -- para revelado uno por uno
  `logo`                    VARCHAR(255) DEFAULT NULL,
  `fondo_tipo`              ENUM('animacion','color','imagen','video') NOT NULL DEFAULT 'animacion',
  `fondo_archivo`           VARCHAR(255) DEFAULT NULL,
  `fondo_color`             VARCHAR(40) DEFAULT NULL,
  `texto_espera`            VARCHAR(255) DEFAULT NULL,
  `texto_activa`            VARCHAR(255) DEFAULT NULL,
  `texto_pausada`           VARCHAR(255) DEFAULT NULL,
  `texto_finalizada`        VARCHAR(255) DEFAULT NULL,
  `ronda`                   INT(11) NOT NULL DEFAULT 1,       -- se incrementa al reiniciar
  `version_token`           BIGINT NOT NULL DEFAULT 0,        -- para tiempo real (polling)
  `usuario_admin_id`        INT(11) DEFAULT NULL,
  `fecha_creacion`          TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `fecha_inicio`            DATETIME DEFAULT NULL,
  `fecha_finalizacion`      DATETIME DEFAULT NULL,
  `updated_at`              TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_codigo` (`codigo_publico`),
  KEY `idx_estado` (`estado`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ---------------------------------------------------------------------
-- Participantes habilitados por votación (referencia a `participantes`)
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `votacion_participantes` (
  `id`             INT(11) NOT NULL AUTO_INCREMENT,
  `votacion_id`    INT(11) NOT NULL,
  `participante_id` INT(11) NOT NULL,
  `orden`          INT(11) NOT NULL DEFAULT 0,
  `activo`         TINYINT(1) NOT NULL DEFAULT 1,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_vot_part` (`votacion_id`,`participante_id`),
  KEY `idx_votacion` (`votacion_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ---------------------------------------------------------------------
-- Votos (un voto por navegador/dispositivo por votación y ronda)
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `votacion_votos` (
  `id`               INT(11) NOT NULL AUTO_INCREMENT,
  `votacion_id`      INT(11) NOT NULL,
  `ronda`            INT(11) NOT NULL DEFAULT 1,
  `participante_id`  INT(11) NOT NULL,
  `navegador_hash`   CHAR(64) NOT NULL,
  `token_hash`       CHAR(64) DEFAULT NULL,
  `ip_hash`          CHAR(64) DEFAULT NULL,
  `user_agent_hash`  CHAR(64) DEFAULT NULL,
  `fecha_hora`       TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `estado`           ENUM('valido','archivado','anulado') NOT NULL DEFAULT 'valido',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_voto_navegador` (`votacion_id`,`ronda`,`navegador_hash`),
  KEY `idx_ranking` (`votacion_id`,`ronda`,`estado`,`participante_id`),
  KEY `idx_ip` (`ip_hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ---------------------------------------------------------------------
-- Historial / auditoría de acciones administrativas
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `votacion_historial` (
  `id`               INT(11) NOT NULL AUTO_INCREMENT,
  `votacion_id`      INT(11) DEFAULT NULL,
  `accion`           VARCHAR(60) NOT NULL,
  `usuario_admin_id` INT(11) DEFAULT NULL,
  `descripcion`      VARCHAR(500) DEFAULT NULL,
  `fecha_hora`       TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_votacion` (`votacion_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ---------------------------------------------------------------------
-- Configuración extra por votación (clave/valor, extensible)
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `votacion_configuracion` (
  `id`          INT(11) NOT NULL AUTO_INCREMENT,
  `votacion_id` INT(11) NOT NULL,
  `clave`       VARCHAR(80) NOT NULL,
  `valor`       TEXT DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_vot_clave` (`votacion_id`,`clave`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =====================================================================
--  FIN MIGRACIÓN VOTACIONES
-- =====================================================================
