-- ============================================================
-- Club Palestino CRM v2.0 — MÓDULO EVENTOS Y ARRIENDOS
-- Fase 5
-- ============================================================

-- ── 1. TIPOS DE EVENTO ────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `evento_tipos` (
    `id`          TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
    `empresa_id`  TINYINT UNSIGNED NOT NULL DEFAULT 1,
    `nombre`      VARCHAR(80)      NOT NULL,
    `icono`       VARCHAR(10)      NULL,
    `requiere_inscripcion` TINYINT(1) NOT NULL DEFAULT 0,
    `requiere_pago`        TINYINT(1) NOT NULL DEFAULT 0,
    `activo`      TINYINT(1)       NOT NULL DEFAULT 1,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `evento_tipos` (`empresa_id`,`nombre`,`icono`,`requiere_inscripcion`,`requiere_pago`) VALUES
(1,'Torneo interno',        '🏆',1,0),
(1,'Torneo interclub',      '🤝',1,0),
(1,'Fiesta / Evento social','🎉',1,0),
(1,'Asamblea de socios',    '🗳️',0,0),
(1,'Evento cultural',       '🎭',1,0),
(1,'Clase especial',        '📚',1,1),
(1,'Arriendo de espacio',   '🏢',1,1),
(1,'Evento externo',        '🌐',1,1),
(1,'Campaña benéfica',      '❤️',0,0);

-- ── 2. ESPACIOS / INSTALACIONES ARRENDABLES ───────────────────
CREATE TABLE IF NOT EXISTS `evento_espacios` (
    `id`          SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    `empresa_id`  TINYINT UNSIGNED  NOT NULL DEFAULT 3,
    `nombre`      VARCHAR(100)      NOT NULL,
    `descripcion` TEXT              NULL,
    `tipo`        ENUM('salon','cancha','quincho','piscina','sala','exterior','otro') NOT NULL DEFAULT 'salon',
    `capacidad_min` SMALLINT UNSIGNED NULL,
    `capacidad_max` SMALLINT UNSIGNED NOT NULL DEFAULT 50,
    `precio_hora_uf`  DECIMAL(8,2)  NULL,
    `precio_dia_uf`   DECIMAL(8,2)  NULL,
    `precio_medio_dia_uf` DECIMAL(8,2) NULL,
    `deposito_garantia_uf` DECIMAL(8,2) NULL DEFAULT 0,
    `incluye`     TEXT              NULL COMMENT 'Qué incluye el arriendo: sillas, mesas, etc.',
    `restricciones` TEXT            NULL,
    `imagen_path` VARCHAR(200)      NULL,
    `activo`      TINYINT(1)        NOT NULL DEFAULT 1,
    `orden`       TINYINT UNSIGNED  NOT NULL DEFAULT 0,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `evento_espacios`
    (`empresa_id`,`nombre`,`tipo`,`capacidad_max`,`precio_dia_uf`,`precio_medio_dia_uf`,`deposito_garantia_uf`,`incluye`,`orden`) VALUES
(3,'Salón Principal',  'salon',  500, 40.00, 25.00, 10.00, 'Sillas, mesas, sonido básico, proyector', 1),
(3,'Salón Azul',       'salon',  150, 20.00, 12.00,  5.00, 'Sillas, mesas, pizarrón', 2),
(3,'Pérgola',          'exterior',200,18.00, 10.00,  5.00, 'Mesas y sillas exteriores', 3),
(3,'Quincho 1',        'quincho', 40,  8.00,  5.00,  3.00, 'Parrilla, mesas, sillas', 4),
(3,'Quincho 2',        'quincho', 60, 10.00,  6.00,  3.00, 'Parrilla doble, mesas, sillas', 5),
(3,'Cancha Fútbol',    'cancha',  22,  5.00, NULL,   2.00, 'Arcos, balones', 6),
(3,'Cancha Tenis 1',   'cancha',   4,  2.00, NULL,   0.00, 'Red, marcador', 7),
(3,'Cancha Tenis 2',   'cancha',   4,  2.00, NULL,   0.00, 'Red, marcador', 8),
(3,'Sala de Reuniones','sala',    20,  3.00,  2.00,  0.00, 'Mesa, sillas, proyector, wifi', 9),
(3,'Piscina (evento)', 'piscina', 100,25.00, 15.00,  8.00, 'Uso exclusivo, salvavidas', 10);

-- ── 3. EVENTOS ────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `eventos` (
    `id`            INT UNSIGNED      NOT NULL AUTO_INCREMENT,
    `empresa_id`    TINYINT UNSIGNED  NOT NULL DEFAULT 1,
    `tipo_id`       TINYINT UNSIGNED  NOT NULL,
    `nombre`        VARCHAR(200)      NOT NULL,
    `descripcion`   TEXT              NULL,
    `imagen_path`   VARCHAR(200)      NULL,
    `fecha_inicio`  DATETIME          NOT NULL,
    `fecha_fin`     DATETIME          NOT NULL,
    `lugar`         VARCHAR(200)      NULL,
    `organizador`   VARCHAR(150)      NULL,
    `contacto_tel`  VARCHAR(20)       NULL,
    `contacto_email` VARCHAR(100)     NULL,
    `es_publico`    TINYINT(1)        NOT NULL DEFAULT 0 COMMENT '1=visible en web pública',
    `solo_socios`   TINYINT(1)        NOT NULL DEFAULT 1,
    `cupo_maximo`   SMALLINT UNSIGNED NULL,
    `cupo_espera`   TINYINT(1)        NOT NULL DEFAULT 1,
    `precio_socio_uf`    DECIMAL(8,2) NULL DEFAULT 0,
    `precio_externo_uf`  DECIMAL(8,2) NULL DEFAULT 0,
    `precio_socio_clp`   INT UNSIGNED NULL,
    `precio_externo_clp` INT UNSIGNED NULL,
    `requiere_pago` TINYINT(1)        NOT NULL DEFAULT 0,
    `estado`        ENUM('borrador','publicado','inscripciones_abiertas','inscripciones_cerradas','en_curso','finalizado','cancelado') NOT NULL DEFAULT 'borrador',
    `notas_internas` TEXT             NULL,
    `created_by`    INT UNSIGNED      NULL,
    `created_at`    TIMESTAMP         NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`    TIMESTAMP         NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_empresa_evento` (`empresa_id`, `estado`, `fecha_inicio`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 4. ESPACIOS RESERVADOS POR EVENTO ────────────────────────
CREATE TABLE IF NOT EXISTS `evento_espacios_reservados` (
    `id`          INT UNSIGNED      NOT NULL AUTO_INCREMENT,
    `evento_id`   INT UNSIGNED      NOT NULL,
    `espacio_id`  SMALLINT UNSIGNED NOT NULL,
    `fecha_inicio` DATETIME         NOT NULL,
    `fecha_fin`   DATETIME          NOT NULL,
    `modalidad`   ENUM('hora','medio_dia','dia_completo','personalizado') NOT NULL DEFAULT 'dia_completo',
    `horas`       DECIMAL(4,1)      NULL,
    `costo_uf`    DECIMAL(8,2)      NOT NULL DEFAULT 0,
    `estado`      ENUM('reservado','confirmado','liberado') NOT NULL DEFAULT 'reservado',
    PRIMARY KEY (`id`),
    KEY `fk_er_evento`  (`evento_id`),
    KEY `fk_er_espacio` (`espacio_id`),
    CONSTRAINT `fk_er_evento`  FOREIGN KEY (`evento_id`)  REFERENCES `eventos`(`id`) ON DELETE CASCADE,
    CONSTRAINT `fk_er_espacio` FOREIGN KEY (`espacio_id`) REFERENCES `evento_espacios`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 5. INSCRIPCIONES A EVENTOS ────────────────────────────────
CREATE TABLE IF NOT EXISTS `evento_inscripciones` (
    `id`            INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `evento_id`     INT UNSIGNED     NOT NULL,
    `socio_id`      INT UNSIGNED     NULL,
    `nombre`        VARCHAR(150)     NOT NULL,
    `email`         VARCHAR(100)     NULL,
    `telefono`      VARCHAR(20)      NULL,
    `rut`           VARCHAR(12)      NULL,
    `tipo`          ENUM('socio','invitado','externo') NOT NULL DEFAULT 'socio',
    `estado`        ENUM('inscrito','en_espera','confirmado','pagado','cancelado','asistio','no_asistio') NOT NULL DEFAULT 'inscrito',
    `monto_uf`      DECIMAL(8,2)     NOT NULL DEFAULT 0,
    `monto_clp`     INT UNSIGNED     NOT NULL DEFAULT 0,
    `pagado`        TINYINT(1)       NOT NULL DEFAULT 0,
    `dte_id`        INT UNSIGNED     NULL,
    `qr_code`       VARCHAR(200)     NULL COMMENT 'QR de acceso al evento',
    `notas`         VARCHAR(300)     NULL,
    `created_at`    TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `fk_ins_evento` (`evento_id`),
    KEY `idx_socio_ins`  (`socio_id`),
    CONSTRAINT `fk_ins_evento` FOREIGN KEY (`evento_id`) REFERENCES `eventos`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 6. ARRIENDOS DE ESPACIOS (independiente de eventos) ───────
CREATE TABLE IF NOT EXISTS `arriendos` (
    `id`            INT UNSIGNED      NOT NULL AUTO_INCREMENT,
    `empresa_id`    TINYINT UNSIGNED  NOT NULL DEFAULT 3,
    `espacio_id`    SMALLINT UNSIGNED NOT NULL,
    `socio_id`      INT UNSIGNED      NULL,
    `nombre_arrendatario` VARCHAR(150) NOT NULL,
    `rut_arrendatario`    VARCHAR(12)  NULL,
    `email`         VARCHAR(100)      NULL,
    `telefono`      VARCHAR(20)       NULL,
    `proposito`     VARCHAR(300)      NULL COMMENT 'Para qué se arrienda',
    `fecha_inicio`  DATETIME          NOT NULL,
    `fecha_fin`     DATETIME          NOT NULL,
    `modalidad`     ENUM('hora','medio_dia','dia_completo','personalizado') NOT NULL DEFAULT 'dia_completo',
    `horas`         DECIMAL(4,1)      NULL,
    `num_personas`  SMALLINT UNSIGNED NULL,
    `costo_uf`      DECIMAL(8,2)      NOT NULL,
    `deposito_uf`   DECIMAL(8,2)      NOT NULL DEFAULT 0,
    `deposito_devuelto` TINYINT(1)    NOT NULL DEFAULT 0,
    `estado`        ENUM('cotizacion','confirmado','pagado','en_curso','finalizado','cancelado') NOT NULL DEFAULT 'cotizacion',
    `requiere_catering` TINYINT(1)    NOT NULL DEFAULT 0,
    `catering_descripcion' TEXT       NULL,
    `dte_id`        INT UNSIGNED      NULL,
    `observaciones` TEXT              NULL,
    `created_at`    TIMESTAMP         NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_espacio_fecha` (`espacio_id`, `fecha_inicio`),
    KEY `idx_empresa_arr`   (`empresa_id`, `estado`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 7. CHECKLIST DE ARRIENDO ──────────────────────────────────
CREATE TABLE IF NOT EXISTS `arriendo_checklist` (
    `id`          INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    `arriendo_id` INT UNSIGNED  NOT NULL,
    `momento`     ENUM('entrega','devolucion') NOT NULL,
    `item`        VARCHAR(150)  NOT NULL,
    `ok`          TINYINT(1)    NOT NULL DEFAULT 0,
    `observacion` VARCHAR(300)  NULL,
    PRIMARY KEY (`id`),
    KEY `fk_cl_arr` (`arriendo_id`),
    CONSTRAINT `fk_cl_arr` FOREIGN KEY (`arriendo_id`) REFERENCES `arriendos`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 8. PROGRAMAS / AGENDA DE EVENTO ──────────────────────────
CREATE TABLE IF NOT EXISTS `evento_agenda` (
    `id`          INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    `evento_id`   INT UNSIGNED  NOT NULL,
    `hora`        TIME          NOT NULL,
    `titulo`      VARCHAR(200)  NOT NULL,
    `descripcion` TEXT          NULL,
    `responsable` VARCHAR(100)  NULL,
    `orden`       TINYINT       NOT NULL DEFAULT 0,
    PRIMARY KEY (`id`),
    KEY `fk_ag_evento` (`evento_id`),
    CONSTRAINT `fk_ag_evento` FOREIGN KEY (`evento_id`) REFERENCES `eventos`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 9. SPONSORS / AUSPICIADORES ───────────────────────────────
CREATE TABLE IF NOT EXISTS `evento_sponsors` (
    `id`          INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    `evento_id`   INT UNSIGNED  NOT NULL,
    `nombre`      VARCHAR(150)  NOT NULL,
    `logo_path`   VARCHAR(200)  NULL,
    `nivel`       ENUM('oro','plata','bronce','colaborador') NOT NULL DEFAULT 'colaborador',
    PRIMARY KEY (`id`),
    KEY `fk_sp_evento` (`evento_id`),
    CONSTRAINT `fk_sp_evento` FOREIGN KEY (`evento_id`) REFERENCES `eventos`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 10. VOTACIONES (Asambleas) ────────────────────────────────
CREATE TABLE IF NOT EXISTS `votaciones` (
    `id`          INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`  TINYINT UNSIGNED NOT NULL DEFAULT 1,
    `evento_id`   INT UNSIGNED     NULL COMMENT 'Asamblea relacionada',
    `titulo`      VARCHAR(200)     NOT NULL,
    `descripcion` TEXT             NULL,
    `tipo`        ENUM('asamblea','directorio','consulta','eleccion') NOT NULL DEFAULT 'asamblea',
    `fecha_inicio` DATETIME        NOT NULL,
    `fecha_fin`   DATETIME         NOT NULL,
    `estado`      ENUM('borrador','abierta','cerrada','anulada') NOT NULL DEFAULT 'borrador',
    `resultado_visible` TINYINT(1) NOT NULL DEFAULT 0,
    `created_at`  TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `votacion_opciones` (
    `id`          INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `votacion_id` INT UNSIGNED NOT NULL,
    `texto`       VARCHAR(300) NOT NULL,
    `orden`       TINYINT      NOT NULL DEFAULT 0,
    `votos`       INT UNSIGNED NOT NULL DEFAULT 0,
    PRIMARY KEY (`id`),
    KEY `fk_op_vot` (`votacion_id`),
    CONSTRAINT `fk_op_vot` FOREIGN KEY (`votacion_id`) REFERENCES `votaciones`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `votacion_votos` (
    `id`          INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `votacion_id` INT UNSIGNED NOT NULL,
    `opcion_id`   INT UNSIGNED NOT NULL,
    `socio_id`    INT UNSIGNED NOT NULL,
    `hash_voto`   VARCHAR(64)  NOT NULL COMMENT 'SHA256 para anonimato verificable',
    `created_at`  TIMESTAMP    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_socio_votacion` (`votacion_id`, `socio_id`),
    CONSTRAINT `fk_vv_vot` FOREIGN KEY (`votacion_id`) REFERENCES `votaciones`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

