-- ---------------------------------------------------------------------------
-- Réplica de los precios de extras por año (rsv_extraprecio) — contrato v2 de catálogos.
--
-- Proyecto : CL032BACK (portal público) · base asturias_api
-- Equivalente manual de la migración
--   database/migrations/2026_10_07_120000_create_rsv_extraprecio_table.php
-- para aplicarlo directo cuando `php artisan migrate` no esté disponible.
--
-- ES UNA RÉPLICA DE SOLO LECTURA. La tabla maestra vive en Reservaciones V2
-- (cl038reservacionesv2.rsv_extraprecio, Catálogos › Extras). El canal de catálogos
-- (POST /reservaciones/catalogo/aplicar, contrato v2) la reemplaza dentro de la ventana
-- de años; nadie escribe aquí a mano.
--
-- Este script además:
--   · Carga el AÑO EN CURSO desde rsv_extras, para que el portal cobre exactamente lo mismo
--     que antes aunque el primer snapshot v2 aún no llegue. El snapshot lo sobreescribe.
--   · Deja rsv_extras.extraPrecioSocio/extraPrecioInvitado NULL-ables: el contrato v2 ya no
--     los manda y un extra NUEVO del privado no podría insertarse con columnas NOT NULL.
--     NO se borran (se quitarán en una entrega posterior).
--
-- ORDEN DE DESPLIEGUE: este script + el receptor v2 ANTES que el emisor v2 de CL034
-- (docs/PROPUESTA_PRECIOS_EXTRAS_POR_ANIO.md §7).
--
-- ES RE-EJECUTABLE: CREATE TABLE IF NOT EXISTS, carga con NOT EXISTS y MODIFY idempotente.
-- ---------------------------------------------------------------------------

SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS `rsv_extraprecio` (
  `idExtraPrecio`             int          NOT NULL AUTO_INCREMENT,
  `idExtra`                   int          NOT NULL,
  `extraPrecioImporte`        double(18,2) NOT NULL,
  `extraPrecioTipo`           enum('Invitado','Socio') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `extraPrecioAnioAplicacion` year         NOT NULL,
  PRIMARY KEY (`idExtraPrecio`) USING BTREE,
  UNIQUE INDEX `uk_extra_precio_anio` (`idExtra`, `extraPrecioTipo`, `extraPrecioAnioAplicacion`) USING BTREE,
  INDEX `idx_extraprecio_anio` (`extraPrecioAnioAplicacion`) USING BTREE,
  CONSTRAINT `fk_extraprecio_extra`
    FOREIGN KEY (`idExtra`) REFERENCES `rsv_extras` (`idExtra`)
    ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

INSERT INTO `rsv_extraprecio` (`idExtra`, `extraPrecioImporte`, `extraPrecioTipo`, `extraPrecioAnioAplicacion`)
SELECT e.`idExtra`, e.`extraPrecioSocio`, 'Socio', YEAR(CURDATE())
  FROM `rsv_extras` e
 WHERE e.`extraPrecioSocio` IS NOT NULL AND e.`extraPrecioSocio` > 0
   AND NOT EXISTS (SELECT 1 FROM `rsv_extraprecio` p
                    WHERE p.`idExtra` = e.`idExtra` AND p.`extraPrecioTipo` = 'Socio'
                      AND p.`extraPrecioAnioAplicacion` = YEAR(CURDATE()));

INSERT INTO `rsv_extraprecio` (`idExtra`, `extraPrecioImporte`, `extraPrecioTipo`, `extraPrecioAnioAplicacion`)
SELECT e.`idExtra`, e.`extraPrecioInvitado`, 'Invitado', YEAR(CURDATE())
  FROM `rsv_extras` e
 WHERE e.`extraPrecioInvitado` IS NOT NULL AND e.`extraPrecioInvitado` > 0
   AND NOT EXISTS (SELECT 1 FROM `rsv_extraprecio` p
                    WHERE p.`idExtra` = e.`idExtra` AND p.`extraPrecioTipo` = 'Invitado'
                      AND p.`extraPrecioAnioAplicacion` = YEAR(CURDATE()));

ALTER TABLE `rsv_extras`
  MODIFY `extraPrecioSocio`    double(18,2) NULL DEFAULT NULL COMMENT 'OBSOLETO: precios por año en rsv_extraprecio',
  MODIFY `extraPrecioInvitado` double(18,2) NULL DEFAULT NULL COMMENT 'OBSOLETO: precios por año en rsv_extraprecio';
