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

-- Tabela de clientes seguindo empresas
CREATE TABLE cliente_empresas (
  id VARCHAR(36) PRIMARY KEY,
  cliente_id VARCHAR(36) NOT NULL,
  empresa_id VARCHAR(36) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE CASCADE,
  FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
  UNIQUE KEY unique_seguir (cliente_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 clientes
CREATE TABLE cliente_ofertas (
  id VARCHAR(36) PRIMARY KEY,
  cliente_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 (cliente_id) REFERENCES clientes(id) ON DELETE CASCADE,
  FOREIGN KEY (oferta_id) REFERENCES ofertas(id) ON DELETE CASCADE,
  UNIQUE KEY unique_resgate (cliente_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 cliente (tracking)
CREATE TABLE cliente_notificacoes (
  id VARCHAR(36) PRIMARY KEY,
  cliente_id VARCHAR(36) NOT NULL,
  notificacao_id VARCHAR(36) NOT NULL,
  lida BOOLEAN DEFAULT FALSE,
  aberta BOOLEAN DEFAULT FALSE,
  data_abertura TIMESTAMP NULL,
  recebida BOOLEAN DEFAULT FALSE,
  data_recebida TIMESTAMP NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (cliente_id) REFERENCES clientes(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_cliente_ofertas_codigo ON cliente_ofertas(codigo);
