-- SmartVote MVP - módulo próprio de eletivas
-- Execute uma única vez no banco do ambiente smartvote-api.

CREATE TABLE IF NOT EXISTS eletivas (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    evento_id VARCHAR(100) NOT NULL DEFAULT 'eletivas-2026',
    nome VARCHAR(180) NOT NULL,
    descricao TEXT NULL,
    responsavel VARCHAR(180) NOT NULL,
    imagem VARCHAR(255) NULL,
    icone VARCHAR(20) NULL,
    cor VARCHAR(20) NULL,
    vagas_total INT UNSIGNED NOT NULL,
    vagas_ocupadas INT UNSIGNED NOT NULL DEFAULT 0,
    ativa TINYINT(1) NOT NULL DEFAULT 1,
    ordem INT NOT NULL DEFAULT 0,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    KEY idx_eletivas_evento_ativa (evento_id, ativa, ordem),
    CONSTRAINT chk_eletivas_vagas CHECK (vagas_ocupadas <= vagas_total)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS eletiva_series (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    eletiva_id BIGINT UNSIGNED NOT NULL,
    serie VARCHAR(100) NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY uk_eletiva_serie (eletiva_id, serie),
    CONSTRAINT fk_eletiva_series_eletiva
        FOREIGN KEY (eletiva_id) REFERENCES eletivas(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS votos_eletivas (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    evento_id VARCHAR(100) NOT NULL,
    eleitor_id BIGINT UNSIGNED NOT NULL,
    eletiva_id BIGINT UNSIGNED NOT NULL,
    urna_id VARCHAR(100) NULL,
    protocolo CHAR(36) NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uk_voto_eletiva_evento_eleitor (evento_id, eleitor_id),
    KEY idx_votos_eletivas_eletiva (eletiva_id),
    CONSTRAINT fk_votos_eletivas_eletiva
        FOREIGN KEY (eletiva_id) REFERENCES eletivas(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO eletivas
    (evento_id, nome, descricao, responsavel, icone, cor, vagas_total, ordem)
SELECT 'eletivas-2026', 'Robótica e Automação',
       'Introdução à programação, Arduino e projetos de automação.',
       'Professor responsável', '🤖', '#1565C0', 24, 10
WHERE NOT EXISTS (SELECT 1 FROM eletivas WHERE evento_id = 'eletivas-2026');

INSERT INTO eletivas
    (evento_id, nome, descricao, responsavel, icone, cor, vagas_total, ordem)
SELECT 'eletivas-2026', 'Arte e Comunicação Digital',
       'Criação visual, produção de conteúdo e ferramentas digitais.',
       'Professor responsável', '🎨', '#7B1FA2', 20, 20
WHERE (SELECT COUNT(*) FROM eletivas WHERE evento_id = 'eletivas-2026') = 1;
