-- =====================================================
-- Migration: produtos_codigos_barras (Constelacao Produtos/CodigosBarra)
-- Versão: 001
-- Data: 2026-05-29
--
-- Fonte da verdade do `fator` por código de barras de produto.
-- Populada pelo ERP via Produtos/Sincronizacoes/CodigosBarras e lida na bipagem.
--
-- Idempotente: a tabela já existe em ambientes com ERP sincronizado.
-- CREATE TABLE IF NOT EXISTS garante segurança ao re-rodar.
--
-- block é a coluna de tenant (customerControl). block (NOT NULL) é obrigatório.
-- block_* auxiliares são preenchidas pelo framework — sem DEFAULT (padrão Galaxia).
-- =====================================================

CREATE TABLE IF NOT EXISTS produtos_codigos_barras (
    id                  BIGSERIAL PRIMARY KEY,

    -- refs ERP
    codigomd5           VARCHAR(100),
    produto_codigomd5   VARCHAR(100),

    -- dominio
    produto_id          BIGINT       NOT NULL,
    codigo_barras       VARCHAR(60)  NOT NULL,
    tipo_codigo_barras  VARCHAR(20)  NOT NULL DEFAULT 'proprio',
    fator               NUMERIC(6,2) NOT NULL DEFAULT 1,

    -- auditoria
    data_cadastro       TIMESTAMP WITHOUT TIME ZONE,
    data_alteracao      TIMESTAMP WITHOUT TIME ZONE,
    usuario_cadastro    VARCHAR DEFAULT 'default',
    usuario_atualizacao VARCHAR DEFAULT 'default',

    -- tenant (block NOT NULL obrigatorio; block_* auxiliares nullable — framework injeta)
    block               INTEGER NOT NULL,
    block_usuario_id    INTEGER,
    block_filial_id     INTEGER,
    block_empresa_id    INTEGER,
    block_setor_id      INTEGER
);

-- Indices (cobrem as 2 queries de leitura da bipagem)
-- idx_pcb_produto_block: cobre listarPorProdutos (produto_id + filtro block do customerControl)
-- idx_pcb_codigo_block:  cobre resolverPorCodigo (codigo_barras + filtro block do customerControl)
CREATE INDEX IF NOT EXISTS idx_pcb_produto_block ON produtos_codigos_barras (produto_id, block);
CREATE INDEX IF NOT EXISTS idx_pcb_codigo_block  ON produtos_codigos_barras (codigo_barras, block);
CREATE INDEX IF NOT EXISTS idx_pcb_codigomd5     ON produtos_codigos_barras (codigomd5);
CREATE INDEX IF NOT EXISTS idx_pcb_tipo          ON produtos_codigos_barras (tipo_codigo_barras);
