-- Tabla para configuración de Ventanilla Única
-- Script de creación para SQL Server

IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='configuracion_ventanilla_unica' AND xtype='U')
BEGIN
    CREATE TABLE configuracion_ventanilla_unica (
        id_configuracion INT IDENTITY(1,1) PRIMARY KEY,
        id_usuario INT NOT NULL,
        ruta_ejecutable NVARCHAR(500) NOT NULL,
        ruta_archivo_key NVARCHAR(500) NULL,
        ruta_archivo_cer NVARCHAR(500) NULL,
        clave_fiel NVARCHAR(MAX) NULL, -- Encriptado
        rfc_usuario_vu NVARCHAR(13) NOT NULL,
        clave_webservice NVARCHAR(MAX) NULL, -- Encriptado
        fecha_creacion DATETIME2 DEFAULT GETDATE(),
        fecha_actualizacion DATETIME2 NULL,
        activo BIT DEFAULT 1,
        
        -- Constraints
        CONSTRAINT FK_configuracion_vu_usuario 
            FOREIGN KEY (id_usuario) REFERENCES usuarios_sistema(id_usuario) 
            ON DELETE CASCADE,
        
        CONSTRAINT UQ_configuracion_vu_usuario 
            UNIQUE (id_usuario)
    );
    
    PRINT 'Tabla configuracion_ventanilla_unica creada exitosamente';
END
ELSE
BEGIN
    PRINT 'La tabla configuracion_ventanilla_unica ya existe';
END

-- Crear índices para mejorar rendimiento
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name='IX_configuracion_vu_usuario' AND object_id = OBJECT_ID('configuracion_ventanilla_unica'))
BEGIN
    CREATE INDEX IX_configuracion_vu_usuario ON configuracion_ventanilla_unica(id_usuario);
    PRINT 'Índice IX_configuracion_vu_usuario creado';
END

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name='IX_configuracion_vu_rfc' AND object_id = OBJECT_ID('configuracion_ventanilla_unica'))
BEGIN
    CREATE INDEX IX_configuracion_vu_rfc ON configuracion_ventanilla_unica(rfc_usuario_vu);
    PRINT 'Índice IX_configuracion_vu_rfc creado';
END

-- Agregar comentarios descriptivos
EXEC sp_addextendedproperty 
    @name = N'MS_Description', 
    @value = N'Configuración de Ventanilla Única para transmisiones de Manifestación de Valor Electrónica',
    @level0type = N'SCHEMA', @level0name = N'dbo',
    @level1type = N'TABLE', @level1name = N'configuracion_ventanilla_unica';

EXEC sp_addextendedproperty 
    @name = N'MS_Description', 
    @value = N'Ruta completa al archivo ejecutable de Ventanilla Única',
    @level0type = N'SCHEMA', @level0name = N'dbo',
    @level1type = N'TABLE', @level1name = N'configuracion_ventanilla_unica',
    @level2type = N'COLUMN', @level2name = N'ruta_ejecutable';

EXEC sp_addextendedproperty 
    @name = N'MS_Description', 
    @value = N'Ruta al archivo KEY del certificado FIEL',
    @level0type = N'SCHEMA', @level0name = N'dbo',
    @level1type = N'TABLE', @level1name = N'configuracion_ventanilla_unica',
    @level2type = N'COLUMN', @level2name = N'ruta_archivo_key';

EXEC sp_addextendedproperty 
    @name = N'MS_Description', 
    @value = N'Ruta al archivo CER del certificado FIEL',
    @level0type = N'SCHEMA', @level0name = N'dbo',
    @level1type = N'TABLE', @level1name = N'configuracion_ventanilla_unica',
    @level2type = N'COLUMN', @level2name = N'ruta_archivo_cer';

EXEC sp_addextendedproperty 
    @name = N'MS_Description', 
    @value = N'Contraseña FIEL encriptada',
    @level0type = N'SCHEMA', @level0name = N'dbo',
    @level1type = N'TABLE', @level1name = N'configuracion_ventanilla_unica',
    @level2type = N'COLUMN', @level2name = N'clave_fiel';

EXEC sp_addextendedproperty 
    @name = N'MS_Description', 
    @value = N'RFC del usuario para acceso a Ventanilla Única',
    @level0type = N'SCHEMA', @level0name = N'dbo',
    @level1type = N'TABLE', @level1name = N'configuracion_ventanilla_unica',
    @level2type = N'COLUMN', @level2name = N'rfc_usuario_vu';

EXEC sp_addextendedproperty 
    @name = N'MS_Description', 
    @value = N'Contraseña del Web Service encriptada',
    @level0type = N'SCHEMA', @level0name = N'dbo',
    @level1type = N'TABLE', @level1name = N'configuracion_ventanilla_unica',
    @level2type = N'COLUMN', @level2name = N'clave_webservice';

PRINT 'Script de configuración de Ventanilla Única completado exitosamente';