-- Tabela de candidatos
CREATE TABLE IF NOT EXISTS candidatos (
    id INT NOT NULL AUTO_INCREMENT,
    numero_candidato VARCHAR(10) NOT NULL,
    nome VARCHAR(255) NOT NULL,
    cargo VARCHAR(50) NOT NULL,
    partido VARCHAR(10) NOT NULL,
    estado CHAR(2) NOT NULL DEFAULT 'SP',
    ano_eleicao YEAR NOT NULL,
    situacao VARCHAR(50),
    votos_totais INT,
    data_atualizacao TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uk_candidato_ano_estado (numero_candidato, ano_eleicao, estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de resultados por município
CREATE TABLE IF NOT EXISTS resultados_eleitorais_municipio (
    id INT NOT NULL AUTO_INCREMENT,
    municipio_id INT NOT NULL,
    candidato_id INT NOT NULL,
    ano_eleicao YEAR NOT NULL,
    quantidade_votos INT NOT NULL,
    percentual_votos DECIMAL(5,2),
    data_atualizacao TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    KEY municipio_id (municipio_id),
    KEY candidato_id (candidato_id),
    CONSTRAINT fk_resultado_municipio FOREIGN KEY (municipio_id) REFERENCES municipios (id),
    CONSTRAINT fk_resultado_candidato FOREIGN KEY (candidato_id) REFERENCES candidatos (id),
    UNIQUE KEY uk_resultado_municipio (municipio_id, candidato_id, ano_eleicao)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Inserir dados dos candidatos específicos
INSERT INTO candidatos (numero_candidato, nome, cargo, partido, ano_eleicao) VALUES
('2251', 'NOME_DO_CANDIDATO_FEDERAL', 'DEPUTADO FEDERAL', 'PL', 2022),
('22051', 'NOME_DO_CANDIDATO_ESTADUAL', 'DEPUTADO ESTADUAL', 'PL', 2022)
ON DUPLICATE KEY UPDATE 
    nome = VALUES(nome),
    cargo = VALUES(cargo),
    partido = VALUES(partido);
