-- V004__alter_usuario_rol_fk.sql
-- Replaces the hardcoded CHECK constraint on Usuario.Rol with a FOREIGN KEY
-- against dbo.Rol(Codigo). Must run AFTER V003 (which creates dbo.Rol and seeds the
-- codes already in use, including 'admin').
-- Run on: SIGCM2 (prod) and SIGCM2_Test (integration tests)

SET QUOTED_IDENTIFIER ON;
SET ANSI_NULLS ON;
SET NOCOUNT ON;
GO

-- 1) Drop the old hardcoded whitelist CHECK constraint (if still present).
IF EXISTS (
    SELECT 1 FROM sys.check_constraints
    WHERE name = 'CK_Usuario_Rol'
      AND parent_object_id = OBJECT_ID(N'dbo.Usuario')
)
BEGIN
    ALTER TABLE dbo.Usuario DROP CONSTRAINT CK_Usuario_Rol;
    PRINT 'Dropped CK_Usuario_Rol (hardcoded whitelist).';
END
ELSE
BEGIN
    PRINT 'CK_Usuario_Rol not present — skipping drop.';
END
GO

-- 2) Add the FK Usuario.Rol -> Rol.Codigo (only if not already present).
IF NOT EXISTS (
    SELECT 1 FROM sys.foreign_keys
    WHERE name = 'FK_Usuario_Rol'
      AND parent_object_id = OBJECT_ID(N'dbo.Usuario')
)
BEGIN
    ALTER TABLE dbo.Usuario
        ADD CONSTRAINT FK_Usuario_Rol
            FOREIGN KEY (Rol) REFERENCES dbo.Rol(Codigo);
    PRINT 'Added FK_Usuario_Rol -> dbo.Rol(Codigo).';
END
ELSE
BEGIN
    PRINT 'FK_Usuario_Rol already present — skipping.';
END
GO
