CREATE TABLE usuarios (
    id_usuario INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(160) NOT NULL,
    cpf VARCHAR(11) UNIQUE NOT NULL,
    email VARCHAR(120) UNIQUE NOT NULL,
    senha_hash VARCHAR(255) NOT NULL,
    perfil ENUM('0', '1', '2', '3') DEFAULT '0',
    status ENUM('0', '1') DEFAULT '1',
    data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ===========================
-- TABELA: PROGRAMAS
-- ===========================
CREATE TABLE programas (
    id_programa INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    descricao TEXT,
    coordenador_id INT,
    status ENUM('ativo', 'inativo') DEFAULT 'ativo',
    data_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (coordenador_id) REFERENCES usuarios(id_usuario)
        ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- ===========================
-- TABELA: POLOS
-- ===========================
CREATE TABLE polos (
    id_polo INT AUTO_INCREMENT PRIMARY KEY,
    id_programa INT NOT NULL,
    nome VARCHAR(100) NOT NULL,
    municipio VARCHAR(100) NOT NULL,
    endereco VARCHAR(255),
    telefone VARCHAR(20),
    responsavel_id INT,
    status ENUM('ativo', 'inativo') DEFAULT 'ativo',
    data_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_programa) REFERENCES programas(id_programa)
        ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (responsavel_id) REFERENCES usuarios(id_usuario)
        ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- ===========================
-- TABELA: NUCLEOS
-- ===========================
CREATE TABLE nucleos (
    id_nucleo INT AUTO_INCREMENT PRIMARY KEY,
    id_polo INT NOT NULL,
    nome VARCHAR(100) NOT NULL,
    localizacao VARCHAR(150),
    responsavel_id INT,
    capacidade INT,
    status ENUM('ativo', 'inativo') DEFAULT 'ativo',
    data_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_polo) REFERENCES polos(id_polo)
        ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (responsavel_id) REFERENCES usuarios(id_usuario)
        ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE participantes (
    id_participante INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(150) NOT NULL,
    cpf VARCHAR(14) UNIQUE,
    rg VARCHAR(20),
    data_nascimento DATE NOT NULL,
    sexo ENUM('M', 'F', 'Outro'),
    telefone VARCHAR(20),
    email VARCHAR(120),
    endereco VARCHAR(255),
    municipio VARCHAR(100),
    id_programa INT,
    id_polo INT,
    id_nucleo INT,
    observacoes TEXT,
    status ENUM('ativo', 'inativo', 'egresso') DEFAULT 'ativo',
    data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_programa) REFERENCES programas(id_programa)
        ON UPDATE CASCADE ON DELETE SET NULL,
    FOREIGN KEY (id_polo) REFERENCES polos(id_polo)
        ON UPDATE CASCADE ON DELETE SET NULL,
    FOREIGN KEY (id_nucleo) REFERENCES nucleos(id_nucleo)
        ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE atividades (
    id_atividade INT AUTO_INCREMENT PRIMARY KEY,
    id_programa INT NOT NULL,
    id_polo INT,
    id_nucleo INT,
    nome VARCHAR(150) NOT NULL,
    descricao TEXT,
    local VARCHAR(150),
    data_inicio DATETIME NOT NULL,
    data_fim DATETIME,
    responsavel_id INT,
    status ENUM('planejada', 'em_andamento', 'concluida', 'cancelada') DEFAULT 'planejada',
    data_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_programa) REFERENCES programas(id_programa)
        ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (id_polo) REFERENCES polos(id_polo)
        ON UPDATE CASCADE ON DELETE SET NULL,
    FOREIGN KEY (id_nucleo) REFERENCES nucleos(id_nucleo)
        ON UPDATE CASCADE ON DELETE SET NULL,
    FOREIGN KEY (responsavel_id) REFERENCES usuarios(id_usuario)
        ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE participacao_atividade (
    id_participacao INT AUTO_INCREMENT PRIMARY KEY,
    id_participante INT NOT NULL,
    id_atividade INT NOT NULL,
    presenca ENUM('presente', 'ausente', 'justificada') DEFAULT 'presente',
    desempenho VARCHAR(100),
    observacoes TEXT,
    data_registro DATETIME DEFAULT CURRENT_TIMESTAMP,
    registrado_por INT,
    FOREIGN KEY (id_participante) REFERENCES participantes(id_participante)
        ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (id_atividade) REFERENCES atividades(id_atividade)
        ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (registrado_por) REFERENCES usuarios(id_usuario)
        ON UPDATE CASCADE ON DELETE SET NULL,
    UNIQUE KEY uk_participacao (id_participante, id_atividade)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE documentos (
    id_documento INT AUTO_INCREMENT PRIMARY KEY,
    id_participante INT,

    id_programa INT,
    tipo VARCHAR(100) NOT NULL,
    descricao TEXT,
    caminho_arquivo VARCHAR(255) NOT NULL,
    data_envio DATETIME DEFAULT CURRENT_TIMESTAMP,
    usuario_envio INT,
    status ENUM('ativo', 'inativo') DEFAULT 'ativo',
    FOREIGN KEY (id_participante) REFERENCES participantes(id_participante)
        ON UPDATE CASCADE ON DELETE SET NULL,
    FOREIGN KEY (id_programa) REFERENCES programas(id_programa)
        ON UPDATE CASCADE ON DELETE SET NULL,
    FOREIGN KEY (usuario_envio) REFERENCES usuarios(id_usuario)
        ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

