-- Tabla para Templates Rápidos Configurables
CREATE TABLE dbo.templates_rapidos (
    id INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion VARCHAR(255),
    icono VARCHAR(50) DEFAULT '🏢',
    activo BIT DEFAULT 1,
    
    -- Configuración del template
    config_json NVARCHAR(MAX), -- JSON con la configuración completa
    
    -- Campos específicos más usados (para facilitar consultas)
    tipo_moneda VARCHAR(3),
    incoterm VARCHAR(10),
    vinculacion TINYINT,
    pais_proveedor VARCHAR(10),
    tasa_preferencial VARCHAR(20),
    
    -- Metadatos
    id_agencia INT,
    id_usuario_creador INT,
    fecha_creacion DATETIME DEFAULT GETDATE(),
    fecha_modificacion DATETIME DEFAULT GETDATE(),
    
    -- Estadísticas de uso
    veces_usado INT DEFAULT 0,
    ultima_vez_usado DATETIME,
    
    -- Índices
    INDEX IX_templates_rapidos_agencia (id_agencia, activo),
    INDEX IX_templates_rapidos_usuario (id_usuario_creador),
    INDEX IX_templates_rapidos_uso (veces_usado DESC)
);

-- Insertar algunos templates por defecto
INSERT INTO dbo.templates_rapidos (nombre, descripcion, icono, config_json, tipo_moneda, incoterm, vinculacion, pais_proveedor, tasa_preferencial, id_agencia, id_usuario_creador) VALUES
('Importación China', 'FOB, CNY, General, Sin vinculación', '🇨🇳', '{"tipo_moneda":"CNY","incoterm":"FOB","vinculacion":"0","pais_proveedor_texto":"China","tasa_preferencial":"General"}', 'CNY', 'FOB', 0, NULL, 'General', NULL, NULL),
('Importación USA', 'FOB, USD, TLC, Sin vinculación', '🇺🇸', '{"tipo_moneda":"USD","incoterm":"FOB","vinculacion":"0","pais_proveedor_texto":"Estados Unidos","tasa_preferencial":"TLC"}', 'USD', 'FOB', 0, NULL, 'TLC', NULL, NULL),
('Comercializadora', 'FOB, USD, COMERCIALIZADORA, Con vinculación', '🏢', '{"tipo_moneda":"USD","incoterm":"FOB","vinculacion":"2","pais_proveedor_texto":"Estados Unidos","tasa_preferencial":"COMERCIALIZADORA"}', 'USD', 'FOB', 2, NULL, 'COMERCIALIZADORA', NULL, NULL),
('Importación Europa', 'FOB, EUR, General, Sin vinculación', '🇪🇺', '{"tipo_moneda":"EUR","incoterm":"FOB","vinculacion":"0","pais_proveedor_texto":"Alemania","tasa_preferencial":"General"}', 'EUR', 'FOB', 0, NULL, 'General', NULL, NULL),
('PROSEC México', 'FOB, USD, PROSEC, Sin vinculación', '🏭', '{"tipo_moneda":"USD","incoterm":"FOB","vinculacion":"0","pais_proveedor_texto":"Estados Unidos","tasa_preferencial":"PROSEC"}', 'USD', 'FOB', 0, NULL, 'PROSEC', NULL, NULL);

-- Crear procedimiento almacenado para obtener templates
GO
CREATE PROCEDURE sp_obtener_templates_rapidos
    @id_usuario INT,
    @id_agencia INT = NULL
AS
BEGIN
    SELECT 
        id,
        nombre,
        descripcion,
        icono,
        config_json,
        veces_usado,
        ultima_vez_usado
    FROM dbo.templates_rapidos
    WHERE activo = 1
    AND (
        id_agencia IS NULL  -- Templates globales
        OR id_agencia = @id_agencia  -- Templates de la agencia
        OR id_usuario_creador = @id_usuario  -- Templates del usuario
    )
    ORDER BY veces_usado DESC, nombre ASC;
END

-- Crear procedimiento para incrementar uso de template
GO
CREATE PROCEDURE sp_usar_template_rapido
    @id_template INT,
    @id_usuario INT
AS
BEGIN
    UPDATE dbo.templates_rapidos 
    SET veces_usado = veces_usado + 1,
        ultima_vez_usado = GETDATE()
    WHERE id = @id_template;
    
    -- Opcional: Registrar en bitácora de uso
    INSERT INTO dbo.bitacoras (id_usuario, accion, tabla_afectada, id_registro, detalles, fecha_accion)
    VALUES (@id_usuario, 'USAR_TEMPLATE', 'templates_rapidos', @id_template, 'Template rápido utilizado', GETDATE());
END