-- Script de criação da tabela de auditoria
-- Execute este script no seu banco de dados

CREATE TABLE IF NOT EXISTS auditoria (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,
    tipo_usuario ENUM('admin', 'candidato') NOT NULL,
    acao VARCHAR(100) NOT NULL COMMENT 'login, logout, criar, editar, excluir, etc',
    tabela_afetada VARCHAR(100) NULL COMMENT 'Nome da tabela afetada',
    registro_id INT NULL COMMENT 'ID do registro afetado',
    dados_antes TEXT NULL COMMENT 'Dados antes da alteração (JSON)',
    dados_depois TEXT NULL COMMENT 'Dados depois da alteração (JSON)',
    ip_address VARCHAR(45) NOT NULL,
    user_agent VARCHAR(500) NULL,
    data_hora TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_usuario (usuario_id, tipo_usuario),
    INDEX idx_acao (acao),
    INDEX idx_tabela (tabela_afetada),
    INDEX idx_data (data_hora)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Índices adicionais para melhor performance
CREATE INDEX idx_cpf ON candidatos(cpf);
CREATE INDEX idx_email_candidato ON candidatos(email);
CREATE INDEX idx_edital_id ON candidatos(edital_id);
CREATE INDEX idx_edital_vaga_id ON candidatos(edital_vaga_id);
CREATE INDEX idx_email_admin ON administradores(email);
CREATE INDEX idx_cpf_admin ON administradores(cpf);
CREATE INDEX idx_edital_status ON editais(status);
CREATE INDEX idx_edital_datas ON editais(data_inicio_inscricao, data_fim_inscricao);

-- Comentários nas tabelas principais
ALTER TABLE candidatos COMMENT = 'Tabela de candidatos inscritos nos processos seletivos';
ALTER TABLE administradores COMMENT = 'Tabela de usuários administrativos do sistema';
ALTER TABLE editais COMMENT = 'Tabela de editais de processos seletivos';
ALTER TABLE auditoria COMMENT = 'Log de auditoria de todas as ações do sistema';
