-- Tabla para almacenar datos de Manifestación de Valor por factura
CREATE TABLE mve_facturas_datos (
    id INT IDENTITY(1,1) PRIMARY KEY,
    id_pedimento INT NOT NULL,
    id_factura INT NOT NULL,
    numero_factura NVARCHAR(100),
    
    -- Campos Art. 65 - Incrementables
    art65_fecha_transporte DATE NULL,
    art65_importe_transporte DECIMAL(15,2) NULL,
    art65_fecha_descuentos DATE NULL,
    art65_importe_descuentos DECIMAL(15,2) NULL,
    art65_fecha_posteriores DATE NULL,
    art65_importe_posteriores DECIMAL(15,2) NULL,
    art65_fecha_contribuciones DATE NULL,
    art65_importe_contribuciones DECIMAL(15,2) NULL,
    art65_fecha_pagos_vendedor DATE NULL,
    art65_importe_pagos_vendedor DECIMAL(15,2) NULL,
    
    -- Campos Art. 66 - Decrementables
    art66_fecha_comisiones DATE NULL,
    art66_importe_comisiones DECIMAL(15,2) NULL,
    art66_cargo_comisiones NVARCHAR(10) CHECK (art66_cargo_comisiones IN ('Si', 'No')) NULL,
    
    art66_fecha_envases DATE NULL,
    art66_importe_envases DECIMAL(15,2) NULL,
    art66_cargo_envases NVARCHAR(10) CHECK (art66_cargo_envases IN ('Si', 'No')) NULL,
    
    art66_fecha_embalaje DATE NULL,
    art66_importe_embalaje DECIMAL(15,2) NULL,
    art66_cargo_embalaje NVARCHAR(10) CHECK (art66_cargo_embalaje IN ('Si', 'No')) NULL,
    
    art66_fecha_transporte_dec DATE NULL,
    art66_importe_transporte_dec DECIMAL(15,2) NULL,
    art66_cargo_transporte_dec NVARCHAR(10) CHECK (art66_cargo_transporte_dec IN ('Si', 'No')) NULL,
    
    art66_fecha_ingenieria DATE NULL,
    art66_importe_ingenieria DECIMAL(15,2) NULL,
    art66_cargo_ingenieria NVARCHAR(10) CHECK (art66_cargo_ingenieria IN ('Si', 'No')) NULL,
    
    art66_fecha_regalias DATE NULL,
    art66_importe_regalias DECIMAL(15,2) NULL,
    art66_cargo_regalias NVARCHAR(10) CHECK (art66_cargo_regalias IN ('Si', 'No')) NULL,
    
    art66_fecha_producto DATE NULL,
    art66_importe_producto DECIMAL(15,2) NULL,
    art66_cargo_producto NVARCHAR(10) CHECK (art66_cargo_producto IN ('Si', 'No')) NULL,
    
    -- Campos de control
    fecha_creacion DATETIME2 DEFAULT GETDATE(),
    fecha_actualizacion DATETIME2 DEFAULT GETDATE(),
    usuario_creacion NVARCHAR(100),
    
    -- Índices y restricciones
    CONSTRAINT UQ_mve_facturas_datos_pedimento_factura UNIQUE (id_pedimento, id_factura)
);

-- Crear índices separadamente
CREATE INDEX IX_mve_facturas_datos_pedimento ON mve_facturas_datos (id_pedimento);
CREATE INDEX IX_mve_facturas_datos_factura ON mve_facturas_datos (id_factura);

-- Tabla para el historial de solicitudes MVE
CREATE TABLE mve_solicitudes (
    id INT IDENTITY(1,1) PRIMARY KEY,
    id_pedimento INT NOT NULL,
    numero_pedimento NVARCHAR(50),
    estado NVARCHAR(20) CHECK (estado IN ('Pendiente', 'En_Proceso', 'Completada', 'Rechazada')) DEFAULT 'Pendiente',
    fecha_solicitud DATETIME2 DEFAULT GETDATE(),
    fecha_respuesta DATETIME2 NULL,
    observaciones NTEXT,
    usuario_solicitud NVARCHAR(100)
);

-- Crear índices para mve_solicitudes
CREATE INDEX IX_mve_solicitudes_pedimento ON mve_solicitudes (id_pedimento);
CREATE INDEX IX_mve_solicitudes_estado ON mve_solicitudes (estado);
CREATE INDEX IX_mve_solicitudes_fecha_solicitud ON mve_solicitudes (fecha_solicitud);

-- Crear trigger para actualizar fecha_actualizacion automáticamente
CREATE TRIGGER TR_mve_facturas_datos_update
ON mve_facturas_datos
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
    UPDATE mve_facturas_datos
    SET fecha_actualizacion = GETDATE()
    FROM mve_facturas_datos m
    INNER JOIN inserted i ON m.id = i.id;
END;