-- Criação do banco de dados webTHI Videokê AI

-- Tabela de Planos
CREATE TABLE IF NOT EXISTS planos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(50) NOT NULL,
    limite_musicas INT DEFAULT 0,
    limite_salas INT DEFAULT 1,
    limite_gravacoes INT DEFAULT 0,
    ativo BOOLEAN DEFAULT TRUE
);

-- Tabela de Administradores
CREATE TABLE IF NOT EXISTS admins (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    senha VARCHAR(255) NOT NULL,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabela de Usuários (Donos de salas)
CREATE TABLE IF NOT EXISTS usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    senha VARCHAR(255) NOT NULL,
    plano_id INT,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (plano_id) REFERENCES planos(id)
);

-- Tabela de Categorias de Músicas
CREATE TABLE IF NOT EXISTS categorias (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(50) NOT NULL,
    cor VARCHAR(20) DEFAULT '#ffffff',
    icone VARCHAR(50) DEFAULT 'fas fa-music'
);

-- Tabela de Eventos
CREATE TABLE IF NOT EXISTS eventos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    logo VARCHAR(255),
    bloqueado BOOLEAN DEFAULT FALSE,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabela de Músicas
CREATE TABLE IF NOT EXISTS musicas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    titulo VARCHAR(255) NOT NULL,
    artista VARCHAR(255) NOT NULL,
    categoria_id INT,
    arquivo_mp3 VARCHAR(255) NOT NULL,
    capa VARCHAR(255),
    ativa BOOLEAN DEFAULT TRUE,
    cantadas INT DEFAULT 0,
    adicionada_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (categoria_id) REFERENCES categorias(id)
);

-- Tabela de Letras Sincronizadas
CREATE TABLE IF NOT EXISTS letras_sincronizadas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    musica_id INT NOT NULL,
    tempo_ms INT NOT NULL,
    texto TEXT NOT NULL,
    tipo_cantor INT DEFAULT 3, -- 1: Cantor 1, 2: Cantor 2, 3: Todos
    FOREIGN KEY (musica_id) REFERENCES musicas(id) ON DELETE CASCADE
);

-- Tabela de Salas (Criadas pela TV/Notebook)
CREATE TABLE IF NOT EXISTS salas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    codigo VARCHAR(10) UNIQUE NOT NULL,
    usuario_id INT,
    evento_id INT,
    status VARCHAR(20) DEFAULT 'ativa',
    criada_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id),
    FOREIGN KEY (evento_id) REFERENCES eventos(id)
);

-- Tabela de Fila de Músicas
CREATE TABLE IF NOT EXISTS fila_musicas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    sala_id INT NOT NULL,
    musica_id INT NOT NULL,
    cantada_por VARCHAR(100),
    status VARCHAR(20) DEFAULT 'na_fila', -- na_fila, tocando, finalizada
    adicionada_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (sala_id) REFERENCES salas(id) ON DELETE CASCADE,
    FOREIGN KEY (musica_id) REFERENCES musicas(id) ON DELETE CASCADE
);

-- Tabela de Sessões (Controle de entrada de celulares)
CREATE TABLE IF NOT EXISTS sessoes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    sala_id INT NOT NULL,
    nome_usuario VARCHAR(100) NOT NULL,
    iniciada_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (sala_id) REFERENCES salas(id) ON DELETE CASCADE
);

-- Tabela de Gravações
CREATE TABLE IF NOT EXISTS gravacoes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    musica_id INT NOT NULL,
    sala_id INT,
    usuario_nome VARCHAR(100) NOT NULL,
    arquivo_audio VARCHAR(255) NOT NULL,
    nota_ritmo INT,
    nota_participacao INT,
    nota_final INT,
    data_apresentacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (musica_id) REFERENCES musicas(id),
    FOREIGN KEY (sala_id) REFERENCES salas(id) ON DELETE SET NULL
);

-- Tabela de Configurações do Sistema
CREATE TABLE IF NOT EXISTS configuracoes (
    chave VARCHAR(50) PRIMARY KEY,
    valor TEXT
);

-- Tabela de Logs de Ações Administrativas
CREATE TABLE IF NOT EXISTS logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    acao VARCHAR(255) NOT NULL,
    admin_id INT,
    data TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (admin_id) REFERENCES admins(id) ON DELETE SET NULL
);

-- ========================================================
-- DADOS DE EXEMPLO (SEED)
-- ========================================================

-- Inserir Planos Iniciais
INSERT INTO planos (nome, limite_musicas, limite_salas, limite_gravacoes) VALUES 
('Pessoal', 100, 1, 50),
('Festa', 500, 2, 200),
('Bar/Restaurante', 9999, 5, 9999),
('Igreja', 1000, 2, 500),
('Escola', 1000, 5, 500),
('Premium', 9999, 99, 9999);

-- Inserir Categorias Padrão
INSERT INTO categorias (nome, cor, icone) VALUES 
('Sertanejo', '#ff9800', 'fas fa-guitar'),
('Gospel', '#4caf50', 'fas fa-praying-hands'),
('Pagode', '#ffeb3b', 'fas fa-drum'),
('Funk', '#e91e63', 'fas fa-headphones'),
('Infantil', '#00bcd4', 'fas fa-child'),
('Românticas', '#f44336', 'fas fa-heart'),
('Internacional', '#3f51b5', 'fas fa-globe-americas'),
('Festa', '#9c27b0', 'fas fa-glass-cheers');

-- Inserir Usuário Admin Padrão
-- Senha padrão é 'admin123' (hash bcrypt gerado previamente)
-- bcrypt.hashSync('admin123', 10) = $2b$10$wN1z0lJv1P1P/zI.l1Rj8uA.4Gk7.i5I7C0eO9yV/h0eWc4c7jD4W
INSERT INTO admins (nome, email, senha) VALUES 
('Administrador', 'admin@webthi.com.br', '$2b$10$wN1z0lJv1P1P/zI.l1Rj8uA.4Gk7.i5I7C0eO9yV/h0eWc4c7jD4W');

-- Inserir Configurações Globais Iniciais
INSERT INTO configuracoes (chave, valor) VALUES 
('nome_sistema', 'webTHI Videokê AI'),
('manutencao', 'false');
