-- Migration 001: Configuração de integração WMS por empresa
-- Fase 1 — Saída plugável + config por empresa
--
-- Regras de tenant:
--   - block_* sem DEFAULT (framework injeta via salvarConfig())
--   - customerControl=false: isolamento explícito por block_empresa_id
--   - UNIQUE em block_empresa_id: upsert idempotente por empresa
--
-- Defaults do DDL refletem o comportamento de hoje (AC1.5/AC2.3):
--   provedor_saida='galpao', ativo_saida=1, ativo_entrada=0
--   → empresa sem linha = configDefault() = legado intacto

CREATE TABLE IF NOT EXISTS integracao_wms_config (
    id               SERIAL PRIMARY KEY,

    -- saída
    provedor_saida   VARCHAR(40)  NOT NULL DEFAULT 'galpao', -- chave no WmsProviderRegistry
    ativo_saida      SMALLINT     NOT NULL DEFAULT 1,        -- push legado ON por padrão (não-regressão AC1.5)
    endpoint_erp     VARCHAR(255),                           -- sobrescreve env; NULL=usa env
    endpoint_wms     VARCHAR(255),                           -- endpoint canal WMS (NULL=usa env)

    -- entrada (opt-in, OFF por padrão)
    ativo_entrada    SMALLINT     NOT NULL DEFAULT 0,
    contrato_versao  VARCHAR(10)  NOT NULL DEFAULT 'v1',

    -- credencial de saída: apenas a ref/nome do segredo; valor real fica em env
    token_saida_ref  VARCHAR(120),

    -- multi-tenant: sem DEFAULT (framework injeta via salvarConfig())
    block_empresa_id INTEGER,
    block_filial_id  INTEGER,
    block_usuario_id INTEGER,
    block            INTEGER,

    data_cadastro        TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    data_atualizacao     TIMESTAMP WITHOUT TIME ZONE,
    usuario_cadastro     VARCHAR(255),
    usuario_atualizacao  VARCHAR(255)
);

-- Garante 1 linha por empresa (upsert via salvarConfig)
CREATE UNIQUE INDEX IF NOT EXISTS uniq_integracao_wms_config_empresa
    ON integracao_wms_config (block_empresa_id);

-- Corrige ambientes onde a tabela já foi criada sem usuario_cadastro
-- (CREATE TABLE IF NOT EXISTS não altera tabelas existentes)
ALTER TABLE integracao_wms_config ADD COLUMN IF NOT EXISTS usuario_cadastro VARCHAR(255);
