-- ============================================================================
-- 02_create_tables.sql
-- Crea el esquema de LicenciasMIG con PKs, FKs e indices
-- Mantiene los nombres de columnas que el cliente MIG espera
-- ============================================================================

USE LicenciasMIG;
GO

-- ----------------------------------------------------------------------------
-- Empresas
-- ----------------------------------------------------------------------------
IF OBJECT_ID('dbo.Empresas', 'U') IS NULL
BEGIN
    CREATE TABLE dbo.Empresas (
        EmpresaID            INT IDENTITY(1,1) NOT NULL,
        nit                  VARCHAR(50)  NOT NULL,
        razonsocial          VARCHAR(200) NULL,
        nombrecomercial      VARCHAR(200) NULL,
        direccion            VARCHAR(200) NULL,
        telefono             VARCHAR(50)  NULL,
        celular              VARCHAR(50)  NULL,
        mensualidad          BIT          NOT NULL CONSTRAINT DF_Empresas_mensualidad DEFAULT (0),
        regulariza           BIT          NOT NULL CONSTRAINT DF_Empresas_regulariza  DEFAULT (0),
        tipotpv              VARCHAR(30)  NULL,
        fecharegistro        DATETIME     NOT NULL CONSTRAINT DF_Empresas_fecharegistro DEFAULT (GETDATE()),
        fechaactualizacion   DATETIME     NOT NULL CONSTRAINT DF_Empresas_fechaactualizacion DEFAULT (GETDATE()),
        claveproducto        NVARCHAR(MAX) NULL,
        nombreequipo         NVARCHAR(MAX) NULL,
        osversion            NVARCHAR(MAX) NULL,
        CONSTRAINT PK_Empresas PRIMARY KEY CLUSTERED (EmpresaID),
        CONSTRAINT UQ_Empresas_nit UNIQUE (nit)
    );
    CREATE INDEX IX_Empresas_razonsocial ON dbo.Empresas(razonsocial);
    CREATE INDEX IX_Empresas_nombrecomercial ON dbo.Empresas(nombrecomercial);
    PRINT 'Tabla Empresas creada.';
END
GO

-- ----------------------------------------------------------------------------
-- LicenciasEmpresas
-- ----------------------------------------------------------------------------
IF OBJECT_ID('dbo.LicenciasEmpresas', 'U') IS NULL
BEGIN
    CREATE TABLE dbo.LicenciasEmpresas (
        LicenciaID           INT IDENTITY(1,1) NOT NULL,
        nit                  VARCHAR(50)  NOT NULL,
        razonsocial          VARCHAR(200) NULL,
        nombrecomercial      VARCHAR(200) NULL,
        direccion            VARCHAR(200) NULL,
        telefono             VARCHAR(50)  NULL,
        celular              VARCHAR(50)  NULL,
        iddepartamento       VARCHAR(10)  NULL,
        idciudad             VARCHAR(10)  NULL,
        licenciatemporal     BIT          NOT NULL CONSTRAINT DF_Licencias_temporal DEFAULT (0),
        fecharegistro        DATETIME     NOT NULL CONSTRAINT DF_Licencias_fecharegistro DEFAULT (GETDATE()),
        responsable          VARCHAR(500) NULL,
        correoresponsable    VARCHAR(500) NULL,
        telefonoponsable     VARCHAR(500) NULL,
        motivolicencia       VARCHAR(500) NULL,
        claveproducto        NVARCHAR(MAX) NULL,
        nombreequipo         NVARCHAR(MAX) NULL,
        osversion            NVARCHAR(MAX) NULL,
        clavemes             VARCHAR(500) NULL,
        licenciaactiva       BIT          NOT NULL CONSTRAINT DF_Licencias_activa DEFAULT (1),
        bloquearlicencia     BIT          NOT NULL CONSTRAINT DF_Licencias_bloquear DEFAULT (0),
        CONSTRAINT PK_LicenciasEmpresas PRIMARY KEY CLUSTERED (LicenciaID)
    );
    CREATE INDEX IX_Licencias_nit ON dbo.LicenciasEmpresas(nit);
    CREATE INDEX IX_Licencias_clavemes ON dbo.LicenciasEmpresas(clavemes);
    CREATE INDEX IX_Licencias_estado ON dbo.LicenciasEmpresas(licenciaactiva, bloquearlicencia);
    PRINT 'Tabla LicenciasEmpresas creada.';
END
GO

-- ----------------------------------------------------------------------------
-- Usuarios (admin del panel)
-- ----------------------------------------------------------------------------
IF OBJECT_ID('dbo.Usuarios', 'U') IS NULL
BEGIN
    CREATE TABLE dbo.Usuarios (
        UsuarioID        INT IDENTITY(1,1) NOT NULL,
        Username         VARCHAR(50)  NOT NULL,
        PasswordHash     VARCHAR(255) NOT NULL,
        NombreCompleto   VARCHAR(200) NULL,
        Email            VARCHAR(100) NULL,
        Rol              VARCHAR(50)  NOT NULL CONSTRAINT DF_Usuarios_rol DEFAULT ('Admin'),
        Activo           BIT          NOT NULL CONSTRAINT DF_Usuarios_activo DEFAULT (1),
        FechaCreacion    DATETIME     NOT NULL CONSTRAINT DF_Usuarios_creacion DEFAULT (GETDATE()),
        UltimoAcceso     DATETIME     NULL,
        CONSTRAINT PK_Usuarios PRIMARY KEY CLUSTERED (UsuarioID),
        CONSTRAINT UQ_Usuarios_username UNIQUE (Username)
    );
    PRINT 'Tabla Usuarios creada.';
END
GO

-- ----------------------------------------------------------------------------
-- WebServiceLogs (auditoria de llamadas SOAP del cliente MIG)
-- ----------------------------------------------------------------------------
IF OBJECT_ID('dbo.WebServiceLogs', 'U') IS NULL
BEGIN
    CREATE TABLE dbo.WebServiceLogs (
        LogID            BIGINT IDENTITY(1,1) NOT NULL,
        Fecha            DATETIME     NOT NULL CONSTRAINT DF_Logs_fecha DEFAULT (GETDATE()),
        Metodo           VARCHAR(50)  NOT NULL,
        nit              VARCHAR(50)  NULL,
        IpCliente        VARCHAR(45)  NULL,
        nombreequipo     VARCHAR(200) NULL,
        Resultado        VARCHAR(20)  NULL,
        Mensaje          NVARCHAR(MAX) NULL,
        DuracionMs       INT          NULL,
        CONSTRAINT PK_WebServiceLogs PRIMARY KEY CLUSTERED (LogID)
    );
    CREATE INDEX IX_Logs_fecha  ON dbo.WebServiceLogs(Fecha DESC);
    CREATE INDEX IX_Logs_nit    ON dbo.WebServiceLogs(nit);
    CREATE INDEX IX_Logs_metodo ON dbo.WebServiceLogs(Metodo);
    PRINT 'Tabla WebServiceLogs creada.';
END
GO

PRINT 'Schema completo verificado/creado.';
