-- =====================================================
-- Migración 025: Torneos Presenciales
-- Registro de participantes y gestión de torneos
-- =====================================================

-- Tabla de Participantes (Torneos Presenciales)
CREATE TABLE IF NOT EXISTS `torneos_presenciales_participantes` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `cedula` VARCHAR(50) UNIQUE NOT NULL COMMENT 'Documento único del participante',
  `nombre` VARCHAR(100) NOT NULL,
  `apellidos` VARCHAR(100) NOT NULL,
  `telefono` VARCHAR(20) NOT NULL,
  `email` VARCHAR(100) NOT NULL,
  `pais` VARCHAR(50) NOT NULL COMMENT 'Código país (CO, VE, etc)',
  `departamento` VARCHAR(50) NOT NULL COMMENT 'Región/Estado',
  `ciudad` VARCHAR(50) NOT NULL,
  `club` VARCHAR(100) NULL COMMENT 'Club de domino (opcional)',
  `usuario_entrada` VARCHAR(50) GENERATED ALWAYS AS (cedula) STORED COMMENT 'Usuario de entrada al sistema',
  `fecha_registro` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `activo` BOOLEAN DEFAULT TRUE,
  INDEX `idx_pais_depto` (`pais`, `departamento`),
  INDEX `idx_cedula` (`cedula`),
  INDEX `idx_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de Torneos (Configuración y Seguimiento)
CREATE TABLE IF NOT EXISTS `torneos_presenciales` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `nombre` VARCHAR(150) NOT NULL,
  `fecha_inicio` DATE NOT NULL,
  `ubicacion` VARCHAR(150),
  `organizador_id` INT NOT NULL COMMENT 'ID del admin que lo crea',
  `num_rondas` INT DEFAULT 7,
  `pintas_base` INT DEFAULT 100,
  `apuesta` INT DEFAULT 0,
  `estado` ENUM('planificacion', 'en_curso', 'finalizado') DEFAULT 'planificacion',
  `fecha_creacion` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`organizador_id`) REFERENCES `usuarios` (`id`),
  INDEX `idx_estado` (`estado`),
  INDEX `idx_fecha` (`fecha_inicio`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de Inscripciones en Torneos
CREATE TABLE IF NOT EXISTS `torneos_presenciales_inscripciones` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `torneo_id` INT NOT NULL,
  `participante_cedula` VARCHAR(50) NOT NULL,
  `fecha_inscripcion` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `estado` ENUM('inscrito', 'no_presentado', 'descalificado') DEFAULT 'inscrito',
  UNIQUE KEY `unique_torneo_participante` (`torneo_id`, `participante_cedula`),
  FOREIGN KEY (`torneo_id`) REFERENCES `torneos_presenciales` (`id`) ON DELETE CASCADE,
  FOREIGN KEY (`participante_cedula`) REFERENCES `torneos_presenciales_participantes` (`cedula`) ON DELETE CASCADE,
  INDEX `idx_torneo` (`torneo_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de Mesas (Emparejamientos por Ronda)
CREATE TABLE IF NOT EXISTS `torneos_presenciales_mesas` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `torneo_id` INT NOT NULL,
  `ronda_numero` INT NOT NULL,
  `numero_mesa` INT NOT NULL,
  `norte_cedula` VARCHAR(50) NOT NULL,
  `este_cedula` VARCHAR(50) NOT NULL,
  `sur_cedula` VARCHAR(50) NOT NULL,
  `oeste_cedula` VARCHAR(50) NOT NULL,
  `equipo_a_cedulas` TEXT COMMENT 'JSON array de cédulas del equipo A',
  `equipo_b_cedulas` TEXT COMMENT 'JSON array de cédulas del equipo B',
  `fecha_creacion` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY `unique_mesa` (`torneo_id`, `ronda_numero`, `numero_mesa`),
  FOREIGN KEY (`torneo_id`) REFERENCES `torneos_presenciales` (`id`) ON DELETE CASCADE,
  INDEX `idx_ronda` (`ronda_numero`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de Resultados (Reportes de Partidas)
CREATE TABLE IF NOT EXISTS `torneos_presenciales_resultados` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `mesa_id` INT NOT NULL,
  `torneo_id` INT NOT NULL,
  `ronda_numero` INT NOT NULL,
  `norte_pintas` INT,
  `este_pintas` INT,
  `sur_pintas` INT,
  `oeste_pintas` INT,
  `equipo_ganador` ENUM('A', 'B') NOT NULL,
  `fecha_reporte` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY `unique_resultado` (`mesa_id`),
  FOREIGN KEY (`mesa_id`) REFERENCES `torneos_presenciales_mesas` (`id`) ON DELETE CASCADE,
  FOREIGN KEY (`torneo_id`) REFERENCES `torneos_presenciales` (`id`) ON DELETE CASCADE,
  INDEX `idx_torneo_ronda` (`torneo_id`, `ronda_numero`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de Posiciones (Tabla Dinámica)
-- Se calcula ON DEMAND pero se guarda en caché
CREATE TABLE IF NOT EXISTS `torneos_presenciales_posiciones` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `torneo_id` INT NOT NULL,
  `participante_cedula` VARCHAR(50) NOT NULL,
  `posicion` INT,
  `partidos_jugados` INT DEFAULT 0,
  `partidos_ganados` INT DEFAULT 0,
  `diferencia_pintas` INT DEFAULT 0,
  `pintas_a_favor` INT DEFAULT 0,
  `pintas_en_contra` INT DEFAULT 0,
  `fecha_actualizacion` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  UNIQUE KEY `unique_posicion` (`torneo_id`, `participante_cedula`),
  FOREIGN KEY (`torneo_id`) REFERENCES `torneos_presenciales` (`id`) ON DELETE CASCADE,
  FOREIGN KEY (`participante_cedula`) REFERENCES `torneos_presenciales_participantes` (`cedula`),
  INDEX `idx_posicion` (`torneo_id`, `posicion`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de Auditoria (Para rastrear cambios)
CREATE TABLE IF NOT EXISTS `torneos_presenciales_auditoria` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `torneo_id` INT,
  `accion` VARCHAR(50),
  `descripcion` TEXT,
  `usuario_id` INT,
  `fecha` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`torneo_id`) REFERENCES `torneos_presenciales` (`id`) ON DELETE SET NULL,
  FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE SET NULL,
  INDEX `idx_torneo` (`torneo_id`),
  INDEX `idx_fecha` (`fecha`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Insertar algunos datos de ejemplo para Colombia
INSERT INTO `torneos_presenciales_participantes` 
(`cedula`, `nombre`, `apellidos`, `telefono`, `email`, `pais`, `departamento`, `ciudad`, `club`)
VALUES
('12345678', 'Juan', 'Pérez García', '3001234567', 'juan@example.com', 'CO', 'Atlántico', 'Barranquilla', 'Club Dominó Central'),
('87654321', 'María', 'López Martínez', '3001234568', 'maria@example.com', 'CO', 'Bolívar', 'Cartagena', 'Asociación Domino'),
('11111111', 'Carlos', 'Rodríguez Silva', '3001234569', 'carlos@example.com', 'CO', 'Atlántico', 'Soledad', 'Club Dominó Central'),
('22222222', 'Ana', 'Sánchez López', '3001234570', 'ana@example.com', 'CO', 'Antioquia', 'Medellín', 'Dominó Club')
ON DUPLICATE KEY UPDATE `id`=`id`;

-- Fin de migración 025
