-- =====================================================
-- Migration: Edicao de Rota pelo Motorista
-- Data: 2026-04-29
-- =====================================================
--
-- Sinal genérico: opera sobre array/JSON ordenado de paradas e aciona
-- callbacks registrados quando o gestor aprova. O OTP é delegado ao
-- módulo Mensageria/sinais/Otp (contexto = 'edicao_rota').
--
-- Block columns são populadas pelo framework via customerControl/companyControl;
-- não declarar DEFAULT nem alocar manualmente nas queries.
-- =====================================================

CREATE TABLE edicoes_rota (
    id SERIAL PRIMARY KEY,

    -- Identificação pública (link enviado ao motorista)
    token_publico VARCHAR(64) NOT NULL UNIQUE,

    -- Callback (módulo dono da rota)
    callback_modulo        VARCHAR(50)  NOT NULL,
    callback_referencia_id INTEGER      NOT NULL,

    -- Motorista
    telefone_motorista      VARCHAR(30)  NOT NULL,
    identificador_motorista VARCHAR(255),

    -- Rotas (JSONB ordenado)
    rota_atual    JSONB NOT NULL,
    rota_proposta JSONB,

    -- Estado
    status VARCHAR(30) NOT NULL DEFAULT 'aguardando_envio',
        -- aguardando_envio | pendente_aprovacao | aprovada | rejeitada | cancelada
    motivo_rejeicao TEXT,

    -- Decisão do gestor
    respondido_por  INTEGER,
    respondido_em   TIMESTAMP WITHOUT TIME ZONE,
    resposta_gestor TEXT,

    -- Block padrão Galaxia (preenchido pelo framework)
    data_cadastro       TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
    block_filial_id     INTEGER,
    block_usuario_id    INTEGER,
    usuario_cadastro    VARCHAR(255),
    data_atualizacao    TIMESTAMP WITHOUT TIME ZONE,
    usuario_atualizacao VARCHAR(255),
    block_data          TIMESTAMP WITHOUT TIME ZONE,
    block_quem          VARCHAR(255),
    block               INTEGER,
    block_empresa_id    INTEGER
);

CREATE INDEX idx_edicoes_rota_token    ON edicoes_rota (token_publico);
CREATE INDEX idx_edicoes_rota_status   ON edicoes_rota (status);
CREATE INDEX idx_edicoes_rota_callback ON edicoes_rota (callback_modulo, callback_referencia_id);
