-- +goose Up
-- +goose StatementBegin

-- ─────────────────────────────────────────────────────────────────────────────
-- Suporte a múltiplos serviços de personalização por pedido/OP.
--
-- Contexto: um Pedido pode ter itens com tipo_servico diferentes (ex: Aplique,
-- Silk, Bordado). Até então, uma única ordens_producao representava todo o
-- pedido e só conseguia rastrear UM tipo_servico por vez (o do primeiro item),
-- fazendo os demais serviços "sumirem" ao avançar do Corte para a etapa de
-- personalização.
--
-- Solução: ao liberar do Corte, se o pedido tiver mais de um tipo_servico
-- distinto entre seus itens, a OP original passa a representar o primeiro
-- serviço e uma OP "filha" é criada para cada serviço adicional, todas
-- apontando para a OP raiz via origem_ordem_id. Cada uma segue sua etapa de
-- personalização de forma independente e, quando a última delas terminar,
-- a OP raiz é promovida para Costura (convergência).
-- ─────────────────────────────────────────────────────────────────────────────

ALTER TABLE ordens_producao
    ADD COLUMN IF NOT EXISTS tipo_servico   TEXT,
    ADD COLUMN IF NOT EXISTS origem_ordem_id UUID REFERENCES ordens_producao(id) ON DELETE CASCADE;

CREATE INDEX IF NOT EXISTS idx_ordens_origem       ON ordens_producao (tenant_id, origem_ordem_id);
CREATE INDEX IF NOT EXISTS idx_ordens_tipo_servico ON ordens_producao (tenant_id, tipo_servico);

-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
DROP INDEX IF EXISTS idx_ordens_origem;
DROP INDEX IF EXISTS idx_ordens_tipo_servico;
ALTER TABLE ordens_producao
    DROP COLUMN IF EXISTS tipo_servico,
    DROP COLUMN IF EXISTS origem_ordem_id;
-- +goose StatementEnd
