-- V001__create_usuario.sql
-- Creates the core Usuario table for SIG-CM2
-- Run on: SIGCM2 (prod) and SIGCM2_Test (integration tests)

SET QUOTED_IDENTIFIER ON;
SET ANSI_NULLS ON;
GO

IF OBJECT_ID('dbo.Usuario', 'U') IS NULL
BEGIN
    CREATE TABLE dbo.Usuario (
        Id                INT IDENTITY(1,1)   NOT NULL CONSTRAINT PK_Usuario PRIMARY KEY,
        Username          NVARCHAR(50)        NOT NULL,
        PasswordHash      NVARCHAR(255)       NOT NULL,
        Nombre            NVARCHAR(100)       NOT NULL,
        Apellido          NVARCHAR(100)       NOT NULL,
        Email             NVARCHAR(150)       NULL,
        Rol               VARCHAR(30)         NOT NULL,
        PermisosJson      NVARCHAR(MAX)       NOT NULL CONSTRAINT DF_Usuario_Permisos DEFAULT('[]'),
        Activo            BIT                 NOT NULL CONSTRAINT DF_Usuario_Activo DEFAULT(1),
        FechaCreacion     DATETIME2(3)        NOT NULL CONSTRAINT DF_Usuario_FechaCreacion DEFAULT(SYSUTCDATETIME()),
        FechaModificacion DATETIME2(3)        NULL,
        UltimoLogin       DATETIME2(3)        NULL,
        CONSTRAINT UQ_Usuario_Username UNIQUE (Username),
        CONSTRAINT CK_Usuario_Rol CHECK (Rol IN ('admin','vendedor','tasador','consulta'))
    );

    PRINT 'Table dbo.Usuario created successfully.';
END
ELSE
BEGIN
    PRINT 'Table dbo.Usuario already exists — skipping.';
END
GO

IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_Usuario_Username_Activo' AND object_id = OBJECT_ID('dbo.Usuario'))
BEGIN
    CREATE INDEX IX_Usuario_Username_Activo
        ON dbo.Usuario(Username)
        WHERE Activo = 1;
    PRINT 'Index IX_Usuario_Username_Activo created.';
END
GO
