-- Criação do banco de dados
CREATE DATABASE IF NOT EXISTS notificame CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE notificame;

-- Tabela de empresas
CREATE TABLE empresas (
  id VARCHAR(36) PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  logo VARCHAR(255),
  descricao TEXT,
  codigo VARCHAR(50) UNIQUE,
  ativa BOOLEAN DEFAULT TRUE,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabela de usuários seguindo empresas
CREATE TABLE usuario_empresas (
  id VARCHAR(36) PRIMARY KEY,
  usuario_id VARCHAR(36) NOT NULL,
  empresa_id VARCHAR(36) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE,
  FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
  UNIQUE KEY unique_seguir (usuario_id, empresa_id)
);

-- Tabela de ofertas
CREATE TABLE ofertas (
  id VARCHAR(36) PRIMARY KEY,
  empresa_id VARCHAR(36) NOT NULL,
  titulo VARCHAR(200) NOT NULL,
  descricao TEXT,
  data_expiracao DATETIME NOT NULL,
  tipo ENUM('broadcast', 'empresa', 'score') DEFAULT 'empresa',
  score_minimo INT DEFAULT 0,
  ativa BOOLEAN DEFAULT TRUE,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE
);

-- Tabela de ofertas resgatadas pelos usuários
CREATE TABLE usuario_ofertas (
  id VARCHAR(36) PRIMARY KEY,
  usuario_id VARCHAR(36) NOT NULL,
  oferta_id VARCHAR(36) NOT NULL,
  codigo VARCHAR(20) NOT NULL,
  resgatada BOOLEAN DEFAULT TRUE,
  consumida BOOLEAN DEFAULT FALSE,
  data_resgate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  data_consumo TIMESTAMP NULL,
  FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE,
  FOREIGN KEY (oferta_id) REFERENCES ofertas(id) ON DELETE CASCADE,
  UNIQUE KEY unique_resgate (usuario_id, oferta_id)
);

-- Tabela de notificações enviadas
CREATE TABLE notificacoes (
  id VARCHAR(36) PRIMARY KEY,
  titulo VARCHAR(200) NOT NULL,
  corpo TEXT,
  oferta_id VARCHAR(36),
  tipo ENUM('broadcast', 'empresa', 'score', 'individual') NOT NULL,
  empresa_id VARCHAR(36),
  score_minimo INT DEFAULT 0,
  enviada_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (oferta_id) REFERENCES ofertas(id) ON DELETE SET NULL,
  FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE SET NULL
);

-- Tabela de notificações recebidas por usuário (tracking)
CREATE TABLE usuario_notificacoes (
  id VARCHAR(36) PRIMARY KEY,
  usuario_id VARCHAR(36) NOT NULL,
  notificacao_id VARCHAR(36) NOT NULL,
  lida BOOLEAN DEFAULT FALSE,
  aberta BOOLEAN DEFAULT FALSE,
  data_abertura TIMESTAMP NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE,
  FOREIGN KEY (notificacao_id) REFERENCES notificacoes(id) ON DELETE CASCADE
);
CREATE INDEX idx_ofertas_empresa ON ofertas(empresa_id);
CREATE INDEX idx_ofertas_expiracao ON ofertas(data_expiracao);
CREATE INDEX idx_usuario_ofertas_codigo ON usuario_ofertas(codigo);

-- Inserir algumas empresas de exemplo
INSERT INTO empresas (id, nome, descricao, codigo) VALUES
(UUID(), 'Loja Exemplo', 'Sua loja de ofertas incríveis', 'LOJA001'),
(UUID(), 'Restaurante Sabor', 'Comida boa com desconto', 'REST001'),
(UUID(), 'Tech Store', 'Eletrônicos com os melhores preços', 'TECH001');


ALTER TABLE usuario_notificacoes 
ADD COLUMN recebida BOOLEAN DEFAULT FALSE,
ADD COLUMN data_recebida TIMESTAMP NULL;