-- Inventario para abisfact
-- Basado en el flujo de Contable: cabecera, detalle y saldos por producto.

CREATE TABLE IF NOT EXISTS inventario (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    empresa_id BIGINT UNSIGNED NOT NULL,
    tipo_operacion_id TINYINT UNSIGNED NOT NULL COMMENT 'Referencia a tipo_operacion.id (1=Venta, 2=Compra)',
    origen_tipo VARCHAR(30) NOT NULL DEFAULT 'MANUAL' COMMENT 'MANUAL, COMPROBANTE, COTIZACION, DOCUMENTO_INTERNO',
    origen_id BIGINT UNSIGNED NULL COMMENT 'Id del documento origen',
    fecha_movimiento DATE NOT NULL,
    glosa VARCHAR(255) NULL,
    sentido TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1=Entrada, 2=Salida',
    ambito TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1=Fiscal, 2=Interno',
    estado TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1=Activo, 0=Anulado',
    created_by BIGINT UNSIGNED NULL,
    updated_by BIGINT UNSIGNED NULL,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NULL,
    deleted_at DATETIME NULL,
    KEY idx_inventario_empresa_fecha (empresa_id, fecha_movimiento),
    KEY idx_inventario_origen (origen_tipo, origen_id),
    KEY idx_inventario_tipo_operacion (tipo_operacion_id),
    CONSTRAINT fk_inventario_empresa FOREIGN KEY (empresa_id) REFERENCES empresas(id),
    CONSTRAINT fk_inventario_tipo_operacion FOREIGN KEY (tipo_operacion_id) REFERENCES tipo_operacion(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS inventario_detalle (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    inventario_id BIGINT UNSIGNED NOT NULL,
    catalogo_item_id BIGINT UNSIGNED NULL,
    unidad_medida_id BIGINT UNSIGNED NULL,
    item INT UNSIGNED NOT NULL DEFAULT 1,
    descripcion VARCHAR(255) NOT NULL,
    cantidad DECIMAL(14,4) NOT NULL DEFAULT 0,
    unidad_medida VARCHAR(10) NOT NULL DEFAULT 'NIU',
    valor_unitario DECIMAL(14,4) NOT NULL DEFAULT 0,
    valor_total DECIMAL(14,2) NOT NULL DEFAULT 0,
    estado TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1=Activo, 0=Anulado',
    created_at DATETIME NOT NULL,
    updated_at DATETIME NULL,
    deleted_at DATETIME NULL,
    KEY idx_inv_det_inventario (inventario_id),
    KEY idx_inv_det_catalogo (catalogo_item_id),
    CONSTRAINT fk_inv_det_inventario FOREIGN KEY (inventario_id) REFERENCES inventario(id),
    CONSTRAINT fk_inv_det_catalogo FOREIGN KEY (catalogo_item_id) REFERENCES catalogo_items(id),
    CONSTRAINT fk_inv_det_unidad FOREIGN KEY (unidad_medida_id) REFERENCES unidades_medida(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS inventario_saldos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    empresa_id BIGINT UNSIGNED NOT NULL,
    catalogo_item_id BIGINT UNSIGNED NOT NULL,
    stock_cantidad DECIMAL(14,4) NOT NULL DEFAULT 0,
    stock_valorizado DECIMAL(14,2) NOT NULL DEFAULT 0,
    costo_promedio DECIMAL(14,4) NOT NULL DEFAULT 0,
    updated_at DATETIME NULL,
    created_at DATETIME NOT NULL,
    UNIQUE KEY uq_inv_saldo_empresa_catalogo (empresa_id, catalogo_item_id),
    KEY idx_inv_saldo_empresa (empresa_id),
    CONSTRAINT fk_inv_saldo_empresa FOREIGN KEY (empresa_id) REFERENCES empresas(id),
    CONSTRAINT fk_inv_saldo_catalogo FOREIGN KEY (catalogo_item_id) REFERENCES catalogo_items(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
