-- =============================================================================
--  Migración: Notificaciones ancladas a Membresía (sin login de usuario)
--  Fecha: 2026-07-14
--  Proyecto: CL032 Reservaciones en Línea (reservacioneslinea)
--
--  Cambios:
--   rsv_notificacion
--     - QUITA  idUsuario, idUsuarioOrigen (+ sus FKs e índices)
--     - AGREGA idMembresia    NOT NULL  (FK -> wd_membresia.idMembresia)
--     - AGREGA idIdentificador NOT NULL (valor tomado de wd_membresia.idIdentificador;
--              sin FK ni comentario, es id de tabla privada)
--     - AGREGA idReservacion  NULL      (FK -> rsv_reservacion.idReservacion)
--   rsv_notificacionlog
--     - QUITA  idUsuario (esta app no maneja login de usuario)
--
--  NOTA: se truncan las 3 tablas de notificaciones porque idMembresia es NOT NULL
--        y wd_membresia está vacía: los registros de prueba atados a idUsuario no
--        son migrables. Son datos de prueba.
-- =============================================================================

SET FOREIGN_KEY_CHECKS = 0;

-- 1) Limpieza de datos de prueba
TRUNCATE TABLE rsv_notificacionlog;
TRUNCATE TABLE rsv_canal;
TRUNCATE TABLE rsv_notificacion;

SET FOREIGN_KEY_CHECKS = 1;

-- 2) rsv_notificacion: eliminar andamiaje de usuario
ALTER TABLE rsv_notificacion
    DROP FOREIGN KEY fk_usuario_origen;
ALTER TABLE rsv_notificacion
    DROP FOREIGN KEY Refseg_usuario190;

ALTER TABLE rsv_notificacion
    DROP INDEX idx_usuario_estado,
    DROP INDEX Refseg_usuario190,
    DROP INDEX fk_usuario_origen;

ALTER TABLE rsv_notificacion
    DROP COLUMN idUsuarioOrigen,
    DROP COLUMN idUsuario;

-- 3) rsv_notificacion: nuevos campos de membresía / reservación
ALTER TABLE rsv_notificacion
    ADD COLUMN idMembresia     INT NOT NULL         AFTER notificacionFechaProgramada,
    ADD COLUMN idIdentificador INT NOT NULL         AFTER idMembresia,
    ADD COLUMN idReservacion   INT DEFAULT NULL     AFTER idIdentificador;

ALTER TABLE rsv_notificacion
    ADD KEY idx_membresia_estado (idMembresia, notificacionEstado),
    ADD KEY fk_notificacion_reservacion (idReservacion),
    ADD CONSTRAINT fk_notificacion_membresia
        FOREIGN KEY (idMembresia) REFERENCES wd_membresia (idMembresia)
        ON DELETE CASCADE ON UPDATE RESTRICT,
    ADD CONSTRAINT fk_notificacion_reservacion
        FOREIGN KEY (idReservacion) REFERENCES rsv_reservacion (idReservacion)
        ON DELETE SET NULL ON UPDATE RESTRICT;

-- 4) rsv_notificacionlog: quitar idUsuario
ALTER TABLE rsv_notificacionlog
    DROP COLUMN idUsuario;
