-- ============================================================
-- MIGRAÇÃO: Sistema de Chat de Suporte e Notificações
-- Data: Dezembro 2025
-- Versão: Checkout Pro 2025
-- ============================================================
-- 
-- Este arquivo cria as tabelas necessárias para:
-- 1. Chat de Suporte Ao Vivo (Admin ↔ Usuário)
-- 2. Sistema de Notificações/Avisos (Broadcast)
-- 3. Configuração do Chat (Habilitar/Desabilitar)
-- ============================================================

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";

-- ============================================================
-- TABELA: Configuração do Chat de Suporte
-- ============================================================
CREATE TABLE IF NOT EXISTS `chat_config` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `chat_habilitado` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0 = Desabilitado, 1 = Habilitado',
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Inserir configuração padrão (chat desabilitado por padrão)
INSERT INTO `chat_config` (`chat_habilitado`) VALUES (0)
ON DUPLICATE KEY UPDATE `chat_habilitado` = VALUES(`chat_habilitado`);

-- ============================================================
-- TABELA: Conversas de Chat de Suporte
-- ============================================================
CREATE TABLE IF NOT EXISTS `chat_conversas` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` INT(11) NOT NULL COMMENT 'ID do usuário que iniciou o chat',
  `admin_id` INT(11) NULL DEFAULT NULL COMMENT 'ID do admin que está atendendo (NULL se nenhum)',
  `status` ENUM('aberta', 'em_atendimento', 'fechada') NOT NULL DEFAULT 'aberta',
  `assunto` VARCHAR(255) NULL DEFAULT NULL COMMENT 'Assunto da conversa',
  `ultima_mensagem_at` DATETIME NULL DEFAULT NULL COMMENT 'Data da última mensagem',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_usuario_id` (`usuario_id`),
  KEY `idx_admin_id` (`admin_id`),
  KEY `idx_status` (`status`),
  KEY `idx_ultima_mensagem_at` (`ultima_mensagem_at`),
  CONSTRAINT `fk_chat_conversas_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_chat_conversas_admin` FOREIGN KEY (`admin_id`) REFERENCES `usuarios` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: Mensagens do Chat
-- ============================================================
CREATE TABLE IF NOT EXISTS `chat_mensagens` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `conversa_id` INT(11) NOT NULL COMMENT 'ID da conversa',
  `remetente_id` INT(11) NOT NULL COMMENT 'ID do usuário que enviou (pode ser admin ou usuário)',
  `tipo_remetente` ENUM('usuario', 'admin') NOT NULL COMMENT 'Tipo do remetente',
  `mensagem` TEXT NOT NULL,
  `lida` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0 = Não lida, 1 = Lida',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_conversa_id` (`conversa_id`),
  KEY `idx_remetente_id` (`remetente_id`),
  KEY `idx_lida` (`lida`),
  KEY `idx_created_at` (`created_at`),
  CONSTRAINT `fk_chat_mensagens_conversa` FOREIGN KEY (`conversa_id`) REFERENCES `chat_conversas` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_chat_mensagens_remetente` FOREIGN KEY (`remetente_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: Notificações/Avisos (Broadcast)
-- ============================================================
CREATE TABLE IF NOT EXISTS `notificacoes` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `titulo` VARCHAR(255) NOT NULL COMMENT 'Título da notificação',
  `conteudo` TEXT NOT NULL COMMENT 'Conteúdo da notificação (texto)',
  `tipo` ENUM('texto', 'imagem', 'video', 'acao') NOT NULL DEFAULT 'texto' COMMENT 'Tipo de conteúdo',
  `imagem_url` VARCHAR(500) NULL DEFAULT NULL COMMENT 'URL da imagem (se tipo = imagem)',
  `video_url` VARCHAR(500) NULL DEFAULT NULL COMMENT 'URL do vídeo ou iframe (se tipo = video)',
  `botao_texto` VARCHAR(100) NULL DEFAULT NULL COMMENT 'Texto do botão de ação',
  `botao_url` VARCHAR(500) NULL DEFAULT NULL COMMENT 'URL do botão de ação',
  `agendado` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0 = Enviar agora, 1 = Agendado',
  `data_envio` DATETIME NULL DEFAULT NULL COMMENT 'Data/hora para envio (se agendado)',
  `status` ENUM('rascunho', 'agendado', 'enviado', 'cancelado') NOT NULL DEFAULT 'rascunho',
  `criado_por` INT(11) NOT NULL COMMENT 'ID do admin que criou',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_status` (`status`),
  KEY `idx_data_envio` (`data_envio`),
  KEY `idx_criado_por` (`criado_por`),
  CONSTRAINT `fk_notificacoes_criado_por` FOREIGN KEY (`criado_por`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: Notificações Lidas pelos Usuários
-- ============================================================
CREATE TABLE IF NOT EXISTS `notificacoes_lidas` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `notificacao_id` INT(11) NOT NULL COMMENT 'ID da notificação',
  `usuario_id` INT(11) NOT NULL COMMENT 'ID do usuário que leu',
  `lida_em` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_notificacao_usuario` (`notificacao_id`, `usuario_id`),
  KEY `idx_usuario_id` (`usuario_id`),
  KEY `idx_lida_em` (`lida_em`),
  CONSTRAINT `fk_notificacoes_lidas_notificacao` FOREIGN KEY (`notificacao_id`) REFERENCES `notificacoes` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_notificacoes_lidas_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- ADICIONAR CAMPO DE FOTO DE PERFIL NA TABELA USUARIOS
-- ============================================================
-- Verificar se a coluna foto_perfil já existe antes de adicionar
SET @col_exists = (
    SELECT COUNT(*) 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_SCHEMA = DATABASE() 
    AND TABLE_NAME = 'usuarios' 
    AND COLUMN_NAME = 'foto_perfil'
);

SET @sql_add_foto = IF(@col_exists = 0,
    'ALTER TABLE usuarios ADD COLUMN foto_perfil VARCHAR(500) NULL DEFAULT NULL COMMENT ''URL da foto de perfil do usuário'' AFTER email',
    'SELECT 1'
);

PREPARE stmt FROM @sql_add_foto;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

COMMIT;

