-- =====================================================
-- Tabela de estado de provisionamento do Dashboard Expedicao por block.
-- Granularidade: 1 linha por block.
-- status: aguardando | em_progresso | pronto | falhou
-- =====================================================

BEGIN;

CREATE TABLE IF NOT EXISTS dashboard_expedicao_setup (
    id              SERIAL PRIMARY KEY,
    status          VARCHAR(20) NOT NULL DEFAULT 'aguardando',
    -- aguardando | em_progresso | pronto | falhou
    iniciado_em     TIMESTAMP WITHOUT TIME ZONE,
    finalizado_em   TIMESTAMP WITHOUT TIME ZONE,
    pid             INTEGER,
    erro_mensagem   TEXT,
    tentativas      INTEGER NOT NULL DEFAULT 0,

    -- Block columns obrigatórias (sem DEFAULT — framework injeta via customerControl/companyControl)
    block                  INTEGER NOT NULL,
    block_empresa_id       INTEGER,
    block_filial_id        INTEGER,
    block_usuario_id       INTEGER,
    block_setor_id         INTEGER,
    block_quem             VARCHAR(255),
    block_data             TIMESTAMP WITHOUT TIME ZONE,
    data_cadastro          TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    data_atualizacao       TIMESTAMP WITHOUT TIME ZONE,
    usuario_cadastro       VARCHAR(255),
    usuario_atualizacao    VARCHAR(255),

    CONSTRAINT dashboard_expedicao_setup_block_unq UNIQUE (block)
);

CREATE INDEX IF NOT EXISTS dashboard_expedicao_setup_status_idx
    ON dashboard_expedicao_setup (status, iniciado_em);

-- Nota: sem seed de blocks existentes.
-- Clientes legacy com grupos_regioes cadastrados cairão na tela de setup no primeiro
-- acesso pós-deploy. O setup detectará grupos_regioes já existente (garantirGrupoPadrao
-- é idempotente), executará o cron e marcará 'pronto'. Lento apenas na primeira visita.
-- Motivo da remoção: block_empresa_id == block é coincidência histórica; o framework
-- injeta as colunas block_* via customerControl/companyControl — não passamos esses valores
-- manualmente nos arrays de dados (feedback_block_columns).

COMMIT;
