/*
================================================================================
  Migration: tabla Solicitudes para LicenciasMiG
  Fecha: 2026-05-20

  Crea la tabla que almacena las solicitudes de licencia hechas desde MIG
  (modulo cliente) y su estado de aprobacion.

  La tabla LicenciasEmpresas se sigue usando para licencias activas; al
  aprobar una solicitud, la web inserta/actualiza alli con licenciaactiva=1
  para mantener compatibilidad con ValidarEmpresa.

  Es idempotente: si la tabla ya existe, no falla.
================================================================================
*/

IF NOT EXISTS (
    SELECT 1 FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME = 'Solicitudes'
)
BEGIN
    CREATE TABLE Solicitudes (
        SolicitudID         INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
        NIT                 VARCHAR(50)  NOT NULL,
        NombreEmpresa       VARCHAR(255) NULL,
        NombreComercial     VARCHAR(255) NULL,
        Direccion           VARCHAR(500) NULL,
        Telefono            VARCHAR(50)  NULL,
        Celular             VARCHAR(50)  NULL,
        Departamento        VARCHAR(100) NULL,
        Ciudad              VARCHAR(100) NULL,
        Responsable         VARCHAR(255) NULL,
        TelefonoResponsable VARCHAR(50)  NULL,
        CorreoResponsable   VARCHAR(255) NULL,
        Motivo              VARCHAR(1000) NULL,
        LicenciaTemporal    CHAR(2)      NOT NULL DEFAULT 'NO',  -- 'SI' o 'NO'
        ClaveProducto       NVARCHAR(MAX) NOT NULL,
        ClaveMes            NVARCHAR(MAX) NULL,
        NombreEquipo        VARCHAR(200) NULL,
        OSVersion           VARCHAR(255) NULL,
        Modulo              VARCHAR(50)  NOT NULL DEFAULT 'MIG',  -- MIG | MIGMESEROS | MIGADMINISTRATIVO

        FechaSolicitud      DATETIME     NOT NULL DEFAULT GETDATE(),
        Estado              VARCHAR(20)  NOT NULL DEFAULT 'Pendiente',  -- Pendiente | Aprobada | Rechazada
        FechaResolucion     DATETIME     NULL,
        UsuarioAprobador    VARCHAR(100) NULL,
        Observaciones       VARCHAR(2000) NULL,
        FechaVencimiento    DATETIME     NULL,

        IpCliente           VARCHAR(45)  NULL,

        CONSTRAINT CK_Solicitudes_Estado CHECK (Estado IN ('Pendiente', 'Aprobada', 'Rechazada')),
        CONSTRAINT CK_Solicitudes_LicTemp CHECK (LicenciaTemporal IN ('SI', 'NO'))
    );

    PRINT '>> Tabla Solicitudes creada.';
END
ELSE
BEGIN
    PRINT '>> Tabla Solicitudes ya existe. Skip.';
END
GO

/*------------------------------------------------------------------
  Indices
------------------------------------------------------------------*/
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_Solicitudes_Estado' AND object_id = OBJECT_ID('Solicitudes'))
BEGIN
    CREATE INDEX IX_Solicitudes_Estado
        ON Solicitudes (Estado, FechaSolicitud DESC);
    PRINT '>> IX_Solicitudes_Estado creado.';
END
GO

IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_Solicitudes_Polling' AND object_id = OBJECT_ID('Solicitudes'))
BEGIN
    -- Indice para que ConsultarEstadoSolicitud (que filtra por NIT + ClaveProducto + NombreEquipo) sea rapido
    CREATE INDEX IX_Solicitudes_Polling
        ON Solicitudes (NIT, NombreEquipo)
        INCLUDE (Estado, FechaResolucion, Observaciones);
    PRINT '>> IX_Solicitudes_Polling creado.';
END
GO

/*------------------------------------------------------------------
  Verificacion
------------------------------------------------------------------*/
SELECT TOP 1 * FROM Solicitudes WHERE 1 = 0;  -- valida que la tabla exista y devuelva schema
PRINT '>> Migration completada.';
