-- Migration de Sincronização Completa (DEV -> PROD/HML)
-- Este script verifica e cria colunas/tabelas que podem estar faltando após o merge de DEV.
-- Seguro para rodar múltiplas vezes (usa IF NOT EXISTS).

-- ==============================================================================
-- 1. UTILS
-- ==============================================================================
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

-- ==============================================================================
-- 2. CADASTRO DE PROFISSIONAIS (Atualizações de Colunas)
-- ==============================================================================
ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS email VARCHAR(255);
ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS avatar_url VARCHAR(255);
ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS tabela_free VARCHAR(50);
ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS media NUMERIC(3,2);
ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS equipamentos TEXT;
ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS extra_por_equipamento BOOLEAN DEFAULT FALSE;
ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS qtd_estudio INT;
ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS disp_horario INT;
ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS desempenho_evento INT;
ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS educacao_simpatia INT;
ALTER TABLE cadastro_profissionais ADD COLUMN IF NOT EXISTS qual_tec INT;

-- ==============================================================================
-- 3. TABELAS DE DOMÍNIO E CONFIGURAÇÃO
-- ==============================================================================

-- Tabela de Preços (Se não existir)
CREATE TABLE IF NOT EXISTS precos_tipos_eventos (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    tipo_evento_id UUID REFERENCES tipos_eventos(id) ON DELETE CASCADE,
    funcao_profissional_id UUID REFERENCES funcoes_profissionais(id) ON DELETE CASCADE,
    valor NUMERIC(10,2) NOT NULL DEFAULT 0.00,
    criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    UNIQUE(tipo_evento_id, funcao_profissional_id)
);

-- Tabela de Cadastro FOT (Se não existir)
CREATE TABLE IF NOT EXISTS cadastro_fot (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    fot INTEGER NOT NULL UNIQUE,
    empresa_id UUID NOT NULL REFERENCES empresas(id),
    curso_id UUID NOT NULL REFERENCES cursos(id),
    ano_formatura_id UUID NOT NULL REFERENCES anos_formaturas(id),
    instituicao VARCHAR(255),
    cidade VARCHAR(255),
    estado VARCHAR(2),
    observacoes TEXT,
    gastos_captacao NUMERIC(10, 2),
    pre_venda BOOLEAN,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

-- Códigos de Acesso
CREATE TABLE IF NOT EXISTS codigos_acesso (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    codigo VARCHAR(50) UNIQUE NOT NULL,
    descricao VARCHAR(255),
    validade_dias INT NOT NULL DEFAULT 30,
    criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    expira_em TIMESTAMPTZ NOT NULL,
    ativo BOOLEAN NOT NULL DEFAULT TRUE,
    usos INT NOT NULL DEFAULT 0
);

-- Cadastro Clientes
CREATE TABLE IF NOT EXISTS cadastro_clientes (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    usuario_id UUID REFERENCES usuarios(id) ON DELETE CASCADE,
    empresa_id UUID REFERENCES empresas(id) ON DELETE SET NULL,
    nome VARCHAR(255),
    telefone VARCHAR(20),
    criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    atualizado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    UNIQUE(usuario_id)
);

-- Juntação Profissionais <-> Funções
CREATE TABLE IF NOT EXISTS profissionais_funcoes_junction (
    profissional_id UUID NOT NULL REFERENCES cadastro_profissionais(id) ON DELETE CASCADE,
    funcao_id UUID NOT NULL REFERENCES funcoes_profissionais(id) ON DELETE CASCADE,
    PRIMARY KEY (profissional_id, funcao_id)
);

-- ==============================================================================
-- 4. MÓDULO DE AGENDA E LOGÍSTICA
-- ==============================================================================

-- Agenda
CREATE TABLE IF NOT EXISTS agenda (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    user_id UUID REFERENCES usuarios(id) ON DELETE CASCADE,
    fot_id UUID NOT NULL REFERENCES cadastro_fot(id) ON DELETE CASCADE,
    data_evento DATE NOT NULL,
    tipo_evento_id UUID NOT NULL REFERENCES tipos_eventos(id),
    observacoes_evento TEXT,
    local_evento VARCHAR(255),
    endereco VARCHAR(255),
    horario VARCHAR(20),
    qtd_formandos INTEGER DEFAULT 0,
    qtd_fotografos INTEGER DEFAULT 0,
    qtd_recepcionistas INTEGER DEFAULT 0,
    qtd_cinegrafistas INTEGER DEFAULT 0,
    qtd_estudios INTEGER DEFAULT 0,
    qtd_ponto_foto INTEGER DEFAULT 0,
    qtd_ponto_id INTEGER DEFAULT 0,
    qtd_ponto_decorado INTEGER DEFAULT 0,
    qtd_pontos_led INTEGER DEFAULT 0,
    qtd_plataforma_360 INTEGER DEFAULT 0,
    status_profissionais VARCHAR(20) DEFAULT 'OK',
    foto_faltante INTEGER DEFAULT 0,
    recep_faltante INTEGER DEFAULT 0,
    cine_faltante INTEGER DEFAULT 0,
    logistica_observacoes TEXT,
    pre_venda BOOLEAN DEFAULT FALSE,
    criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    atualizado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    status VARCHAR(50) DEFAULT 'Pendente'
);

-- Agenda Profissionais (Atribuição)
CREATE TABLE IF NOT EXISTS agenda_profissionais (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    agenda_id UUID NOT NULL REFERENCES agenda(id) ON DELETE CASCADE,
    profissional_id UUID NOT NULL REFERENCES cadastro_profissionais(id) ON DELETE CASCADE,
    status VARCHAR(20) DEFAULT 'PENDENTE',
    motivo_rejeicao TEXT,
    funcao_id UUID REFERENCES funcoes_profissionais(id),
    criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    UNIQUE(agenda_id, profissional_id)
);
ALTER TABLE agenda_profissionais ADD COLUMN IF NOT EXISTS posicao VARCHAR(100);

-- Disponibilidade
CREATE TABLE IF NOT EXISTS disponibilidade_profissionais (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    usuario_id UUID NOT NULL REFERENCES usuarios(id) ON DELETE CASCADE,
    data DATE NOT NULL,
    status VARCHAR(20) NOT NULL DEFAULT 'DISPONIVEL',
    criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    UNIQUE(usuario_id, data)
);

-- Escalas (Time blocks)
CREATE TABLE IF NOT EXISTS agenda_escalas (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    agenda_id UUID NOT NULL REFERENCES agenda(id) ON DELETE CASCADE,
    profissional_id UUID NOT NULL REFERENCES cadastro_profissionais(id) ON DELETE CASCADE,
    data_hora_inicio TIMESTAMPTZ NOT NULL,
    data_hora_fim TIMESTAMPTZ NOT NULL,
    funcao_especifica VARCHAR(100),
    criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    atualizado_em TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

-- Mapas
CREATE TABLE IF NOT EXISTS mapas_eventos (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    agenda_id UUID NOT NULL REFERENCES agenda(id) ON DELETE CASCADE,
    nome VARCHAR(100),
    imagem_url TEXT,
    criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

-- Marcadores
CREATE TABLE IF NOT EXISTS marcadores_mapa (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    mapa_id UUID NOT NULL REFERENCES mapas_eventos(id) ON DELETE CASCADE,
    profissional_id UUID REFERENCES cadastro_profissionais(id) ON DELETE CASCADE,
    pos_x NUMERIC(5,2),
    pos_y NUMERIC(5,2),
    rotulo VARCHAR(50), 
    criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

-- Logística Carros
CREATE TABLE IF NOT EXISTS logistica_carros (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    agenda_id UUID NOT NULL REFERENCES agenda(id) ON DELETE CASCADE,
    motorista_id UUID REFERENCES cadastro_profissionais(id) ON DELETE SET NULL,
    nome_motorista VARCHAR(255),
    horario_chegada VARCHAR(20),
    observacoes TEXT,
    criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    atualizado_em TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

-- Logística Passageiros
CREATE TABLE IF NOT EXISTS logistica_passageiros (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    carro_id UUID NOT NULL REFERENCES logistica_carros(id) ON DELETE CASCADE,
    profissional_id UUID NOT NULL REFERENCES cadastro_profissionais(id) ON DELETE CASCADE,
    criado_em TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    UNIQUE(carro_id, profissional_id)
);

-- ==============================================================================
-- 5. MÓDULO FINANCEIRO (Atualizações)
-- ==============================================================================
DO $$
BEGIN
    IF EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'financial_transactions') THEN
        ALTER TABLE financial_transactions ADD COLUMN IF NOT EXISTS profissional_id UUID REFERENCES cadastro_profissionais(id);
    END IF;
END $$;
