-- +goose Up
-- +goose StatementBegin

-- Checklist por etapa/ordem
CREATE TABLE IF NOT EXISTS etapa_checklist (
    id            UUID        PRIMARY KEY DEFAULT uuid_generate_v4(),
    tenant_id     UUID        NOT NULL,
    ordem_id      UUID        NOT NULL REFERENCES ordens_producao(id) ON DELETE CASCADE,
    etapa         TEXT        NOT NULL,
    item_key      TEXT        NOT NULL,
    item_texto    TEXT        NOT NULL DEFAULT '',
    concluido     BOOLEAN     NOT NULL DEFAULT false,
    concluido_por UUID        REFERENCES users(id) ON DELETE SET NULL,
    concluido_em  TIMESTAMPTZ,
    UNIQUE (tenant_id, ordem_id, etapa, item_key)
);
CREATE INDEX IF NOT EXISTS idx_etapa_checklist_ordem ON etapa_checklist(ordem_id, etapa);

-- Picking list de separação (material_id referencia produtos, não materiais)
CREATE TABLE IF NOT EXISTS separacao_picking (
    id              UUID          PRIMARY KEY DEFAULT uuid_generate_v4(),
    tenant_id       UUID          NOT NULL,
    ordem_id        UUID          NOT NULL REFERENCES ordens_producao(id) ON DELETE CASCADE,
    produto_id      UUID          REFERENCES produtos(id) ON DELETE SET NULL,
    descricao       TEXT          NOT NULL,
    categoria       TEXT          NOT NULL DEFAULT 'outro',
    unidade         TEXT          NOT NULL DEFAULT 'un',
    qtd_necessaria  NUMERIC(12,3) NOT NULL DEFAULT 0,
    qtd_separada    NUMERIC(12,3) NOT NULL DEFAULT 0,
    abatido_estoque BOOLEAN       NOT NULL DEFAULT false,
    criado_em       TIMESTAMPTZ   NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_picking_ordem ON separacao_picking(ordem_id);

-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS separacao_picking;
DROP TABLE IF EXISTS etapa_checklist;
-- +goose StatementEnd
