CREATE DATABASE IF NOT EXISTS webt7708_radio_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE webt7708_radio_db;

CREATE TABLE radios (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  slogan VARCHAR(255),
  frequencia VARCHAR(20),
  logo_url VARCHAR(255),
  whatsapp VARCHAR(20),
  facebook VARCHAR(255),
  instagram VARCHAR(255),
  youtube VARCHAR(255),
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE musicas (
  id INT AUTO_INCREMENT PRIMARY KEY,
  titulo VARCHAR(150) NOT NULL,
  artista VARCHAR(150) NOT NULL,
  album VARCHAR(150),
  capa_url VARCHAR(255),
  arquivo_url VARCHAR(255) NOT NULL,
  duracao INT,
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE playlists (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  descricao TEXT,
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE playlist_musicas (
  playlist_id INT,
  musica_id INT,
  ordem INT DEFAULT 0,
  PRIMARY KEY (playlist_id, musica_id),
  FOREIGN KEY (playlist_id) REFERENCES playlists(id) ON DELETE CASCADE,
  FOREIGN KEY (musica_id) REFERENCES musicas(id) ON DELETE CASCADE
);

CREATE TABLE locutores (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  foto_url VARCHAR(255),
  biografia TEXT,
  facebook VARCHAR(255),
  instagram VARCHAR(255),
  twitter VARCHAR(255),
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE programas (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  descricao TEXT,
  locutor_id INT,
  imagem_url VARCHAR(255),
  horario_inicio TIME NOT NULL,
  horario_fim TIME NOT NULL,
  dias_semana VARCHAR(50),
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (locutor_id) REFERENCES locutores(id) ON DELETE SET NULL
);

CREATE TABLE ouvintes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  ip VARCHAR(50) NOT NULL,
  user_agent TEXT,
  cidade VARCHAR(100),
  estado VARCHAR(50),
  pais VARCHAR(50),
  dispositivo VARCHAR(50),
  conectado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  desconectado_em TIMESTAMP NULL
);

CREATE TABLE historico_execucao (
  id INT AUTO_INCREMENT PRIMARY KEY,
  musica_id INT,
  programa_id INT,
  tocado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (musica_id) REFERENCES musicas(id) ON DELETE SET NULL,
  FOREIGN KEY (programa_id) REFERENCES programas(id) ON DELETE SET NULL
);

CREATE TABLE pedidos_musica (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome_ouvinte VARCHAR(100) NOT NULL,
  bairro_cidade VARCHAR(100),
  artista_musica VARCHAR(255) NOT NULL,
  mensagem TEXT,
  lido BOOLEAN DEFAULT FALSE,
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE mensagens_chat (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  mensagem TEXT NOT NULL,
  ip VARCHAR(50),
  aprovado BOOLEAN DEFAULT TRUE,
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE podcasts (
  id INT AUTO_INCREMENT PRIMARY KEY,
  titulo VARCHAR(150) NOT NULL,
  descricao TEXT,
  categoria VARCHAR(100),
  capa_url VARCHAR(255),
  arquivo_url VARCHAR(255) NOT NULL,
  duracao INT,
  data_publicacao DATETIME DEFAULT CURRENT_TIMESTAMP,
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE anunciantes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  empresa VARCHAR(150) NOT NULL,
  contato VARCHAR(100),
  telefone VARCHAR(20),
  email VARCHAR(100),
  logo_url VARCHAR(255),
  plano VARCHAR(100),
  data_inicial DATE,
  data_final DATE,
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE comerciais (
  id INT AUTO_INCREMENT PRIMARY KEY,
  anunciante_id INT NOT NULL,
  titulo VARCHAR(100) NOT NULL,
  arquivo_url VARCHAR(255) NOT NULL,
  frequencia INT,
  tipo_frequencia ENUM('minutos', 'musicas') DEFAULT 'minutos',
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (anunciante_id) REFERENCES anunciantes(id) ON DELETE CASCADE
);

CREATE TABLE sorteios (
  id INT AUTO_INCREMENT PRIMARY KEY,
  titulo VARCHAR(150) NOT NULL,
  descricao TEXT,
  imagem_url VARCHAR(255),
  data_sorteio DATETIME NOT NULL,
  status ENUM('ativo', 'finalizado') DEFAULT 'ativo',
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE participantes_sorteio (
  id INT AUTO_INCREMENT PRIMARY KEY,
  sorteio_id INT NOT NULL,
  nome VARCHAR(100) NOT NULL,
  telefone VARCHAR(20) NOT NULL,
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (sorteio_id) REFERENCES sorteios(id) ON DELETE CASCADE
);

CREATE TABLE aniversariantes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  data_nascimento DATE NOT NULL,
  bairro_cidade VARCHAR(100),
  telefone VARCHAR(20),
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE financeiro (
  id INT AUTO_INCREMENT PRIMARY KEY,
  cliente_id INT,
  tipo_cliente ENUM('anunciante', 'outro') DEFAULT 'anunciante',
  descricao VARCHAR(255) NOT NULL,
  valor DECIMAL(10, 2) NOT NULL,
  data_vencimento DATE NOT NULL,
  status ENUM('pendente', 'pago', 'vencido') DEFAULT 'pendente',
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE pagamentos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  financeiro_id INT NOT NULL,
  valor_pago DECIMAL(10, 2) NOT NULL,
  data_pagamento DATE NOT NULL,
  forma_pagamento VARCHAR(50),
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (financeiro_id) REFERENCES financeiro(id) ON DELETE CASCADE
);

CREATE TABLE configuracoes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  chave VARCHAR(50) NOT NULL UNIQUE,
  valor TEXT,
  descricao TEXT
);
