-- =====================================================
-- Migration: Solicitacoes Globais
-- Data: 2026-03-11
-- =====================================================

CREATE TABLE solicitacoes_globais (
    id SERIAL PRIMARY KEY,

    -- Polimorfismo
    referencia_tipo     VARCHAR(100) NOT NULL,
    referencia_id       INTEGER      NOT NULL,
    sub_referencia_tipo VARCHAR(100),
    sub_referencia_id   INTEGER,

    -- Dados da solicitação
    tipo           VARCHAR(50) NOT NULL,
    solicitante_id INTEGER     NOT NULL,
    motivo         TEXT,
    payload        JSONB,

    -- Decisão do gestor
    status          VARCHAR(30) DEFAULT 'pendente',
    respondido_por       INTEGER,
    resposta_gestor TEXT,
    respondido_em   TIMESTAMP WITHOUT TIME ZONE,

    -- Block padrão Galaxia
    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 DEFAULT 1,
    block_empresa_id    INTEGER
);

CREATE TABLE solicitacoes_globais_historico (
    id             SERIAL PRIMARY KEY,
    solicitacao_id INTEGER NOT NULL REFERENCES solicitacoes_globais(id),

    status_anterior  VARCHAR(30) NOT NULL,
    status_novo      VARCHAR(30) NOT NULL,
    alterado_por     INTEGER     NOT NULL,
    motivo_alteracao TEXT,

    -- Block padrão Galaxia
    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 DEFAULT 1,
    block_empresa_id    INTEGER
);

-- Índices
CREATE INDEX idx_solic_globais_status  ON solicitacoes_globais (status);
CREATE INDEX idx_solic_globais_ref     ON solicitacoes_globais (referencia_tipo, referencia_id);
CREATE INDEX idx_solic_globais_tipo    ON solicitacoes_globais (tipo);
CREATE INDEX idx_solic_historico_solic ON solicitacoes_globais_historico (solicitacao_id);