-- +goose Up
-- +goose StatementBegin
CREATE TABLE IF NOT EXISTS entrega_expedicao (
    id                  UUID        PRIMARY KEY DEFAULT uuid_generate_v4(),
    tenant_id           UUID        NOT NULL,
    ordem_id            UUID        NOT NULL,
    pedido_id           UUID,
    -- Responsável e datas
    responsavel_nome    TEXT        NOT NULL DEFAULT '',
    responsavel_id      UUID,
    data_expedicao      DATE        NOT NULL DEFAULT CURRENT_DATE,
    data_entrega_real   DATE,
    -- Conferência
    volumes             INTEGER     NOT NULL DEFAULT 1,
    peso_kg             NUMERIC(8,3) NOT NULL DEFAULT 0,
    nf_numero           TEXT        NOT NULL DEFAULT '',
    transportadora      TEXT        NOT NULL DEFAULT '',
    codigo_rastreio     TEXT        NOT NULL DEFAULT '',
    -- Checklist expedição
    chk_pecas_conferidas    BOOLEAN NOT NULL DEFAULT false,
    chk_embalagem_ok        BOOLEAN NOT NULL DEFAULT false,
    chk_nf_ok               BOOLEAN NOT NULL DEFAULT false,
    chk_etiquetas_ok        BOOLEAN NOT NULL DEFAULT false,
    chk_nenhuma_caixa_violada BOOLEAN NOT NULL DEFAULT false,
    -- Conferência no recebimento
    receb_responsavel   TEXT        NOT NULL DEFAULT '',
    receb_assinou       BOOLEAN     NOT NULL DEFAULT false,
    receb_data          DATE,
    receb_obs           TEXT        NOT NULL DEFAULT '',
    -- Status
    status              TEXT        NOT NULL DEFAULT 'pendente'
                        CHECK (status IN ('pendente','expedido','entregue')),
    observacoes         TEXT        NOT NULL DEFAULT '',
    concluido           BOOLEAN     NOT NULL DEFAULT false,
    criado_em           TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    atualizado_em       TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE UNIQUE INDEX IF NOT EXISTS uq_entrega_ordem ON entrega_expedicao (tenant_id, ordem_id);
CREATE INDEX IF NOT EXISTS idx_entrega_tenant ON entrega_expedicao (tenant_id, status, data_expedicao DESC);
-- +goose StatementEnd

-- +goose StatementBegin
CREATE TABLE IF NOT EXISTS entrega_romaneio_itens (
    id          UUID    PRIMARY KEY DEFAULT uuid_generate_v4(),
    tenant_id   UUID    NOT NULL,
    entrega_id  UUID    NOT NULL REFERENCES entrega_expedicao(id) ON DELETE CASCADE,
    descricao   TEXT    NOT NULL,
    quantidade  INTEGER NOT NULL DEFAULT 1,
    unidade     TEXT    NOT NULL DEFAULT 'un',
    obs         TEXT    NOT NULL DEFAULT '',
    criado_em   TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_romaneio_entrega ON entrega_romaneio_itens (entrega_id);
-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS entrega_romaneio_itens;
-- +goose StatementEnd
-- +goose StatementBegin
DROP TABLE IF EXISTS entrega_expedicao;
-- +goose StatementEnd
