-- ============================================================
-- MIGRAÇÃO: Estrutura Completa de LMS (Learning Management System)
-- Data: 2025-01
-- Sistema: Checkout Pro 2025 - Plataforma de Cursos
-- ============================================================
-- 
-- Esta migração cria as tabelas necessárias para transformar
-- o sistema em uma plataforma de cursos estilo Kiwify/Netflix.
-- 
-- Tabelas criadas:
-- 1. modulos - Módulos dentro de um produto
-- 2. aulas - Aulas dentro de um módulo
-- 3. matriculas - Controle de quem comprou o quê
-- 4. progresso_aulas - Gamificação e rastreamento de progresso
-- 
-- ============================================================

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

-- ============================================================
-- TABELA: modulos
-- Armazena os módulos dentro de um produto (curso)
-- ============================================================

CREATE TABLE IF NOT EXISTS `modulos` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `produto_id` INT(11) NOT NULL COMMENT 'ID do produto (curso) ao qual este módulo pertence',
  `nome` VARCHAR(255) NOT NULL COMMENT 'Nome do módulo (ex: "Módulo 1: Introdução")',
  `ordem` INT(11) NOT NULL DEFAULT 0 COMMENT 'Ordem de exibição (1, 2, 3...)',
  `status` VARCHAR(20) NOT NULL DEFAULT 'ativo' COMMENT 'Status: ativo, rascunho, inativo',
  `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_produto_id` (`produto_id`),
  KEY `idx_status` (`status`),
  KEY `idx_ordem` (`produto_id`, `ordem`),
  CONSTRAINT `fk_modulos_produto` FOREIGN KEY (`produto_id`) REFERENCES `produtos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: aulas
-- Armazena as aulas dentro de um módulo
-- ============================================================

CREATE TABLE IF NOT EXISTS `aulas` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `modulo_id` INT(11) NOT NULL COMMENT 'ID do módulo ao qual esta aula pertence',
  `titulo` VARCHAR(255) NOT NULL COMMENT 'Título da aula',
  `video_url` VARCHAR(500) DEFAULT NULL COMMENT 'URL do vídeo (iframe - YouTube, Vimeo, PandaVideo)',
  `descricao` TEXT DEFAULT NULL COMMENT 'Descrição/texto de apoio da aula',
  `duracao` VARCHAR(20) DEFAULT NULL COMMENT 'Duração da aula (ex: "10:00")',
  `ordem` INT(11) NOT NULL DEFAULT 0 COMMENT 'Ordem de exibição dentro do módulo (1, 2, 3...)',
  `materiais_complementares` JSON DEFAULT NULL COMMENT 'Array JSON com links de PDFs/Arquivos complementares',
  `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_modulo_id` (`modulo_id`),
  KEY `idx_ordem` (`modulo_id`, `ordem`),
  CONSTRAINT `fk_aulas_modulo` FOREIGN KEY (`modulo_id`) REFERENCES `modulos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: matriculas
-- Controla quem comprou/está matriculado em qual produto (curso)
-- ============================================================

CREATE TABLE IF NOT EXISTS `matriculas` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` INT(11) NOT NULL COMMENT 'ID do usuário (aluno) matriculado',
  `produto_id` INT(11) DEFAULT NULL COMMENT 'ID do produto (curso) no qual está matriculado',
  `data_inicio` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Data de início do acesso',
  `data_expiracao` DATETIME DEFAULT NULL COMMENT 'Data de expiração do acesso (NULL = acesso vitalício)',
  `status` VARCHAR(20) NOT NULL DEFAULT 'ativo' COMMENT 'Status: ativo, bloqueado, reembolsado, expirado',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_matricula` (`usuario_id`, `produto_id`),
  KEY `idx_usuario_id` (`usuario_id`),
  KEY `idx_produto_id` (`produto_id`),
  KEY `idx_status` (`status`),
  KEY `idx_data_expiracao` (`data_expiracao`),
  CONSTRAINT `fk_matriculas_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_matriculas_produto` FOREIGN KEY (`produto_id`) REFERENCES `produtos` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELA: progresso_aulas
-- Gamificação: Rastreia o progresso de cada aluno em cada aula
-- ============================================================

CREATE TABLE IF NOT EXISTS `progresso_aulas` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` INT(11) NOT NULL COMMENT 'ID do usuário (aluno)',
  `aula_id` INT(11) NOT NULL COMMENT 'ID da aula',
  `concluida` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 = aula concluída, 0 = não concluída',
  `data_conclusao` DATETIME DEFAULT NULL COMMENT 'Data e hora da conclusão da aula',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_progresso` (`usuario_id`, `aula_id`),
  KEY `idx_usuario_id` (`usuario_id`),
  KEY `idx_aula_id` (`aula_id`),
  KEY `idx_concluida` (`usuario_id`, `concluida`),
  CONSTRAINT `fk_progresso_aulas_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_progresso_aulas_aula` FOREIGN KEY (`aula_id`) REFERENCES `aulas` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- RESUMO DAS TABELAS CRIADAS
-- ============================================================
-- 
-- 1. modulos - Módulos dentro de um produto (curso)
--    - Relacionamento: produto_id -> produtos.id (CASCADE)
--    - Índices: produto_id, status, (produto_id, ordem)
-- 
-- 2. aulas - Aulas dentro de um módulo
--    - Relacionamento: modulo_id -> modulos.id (CASCADE)
--    - Índices: modulo_id, (modulo_id, ordem)
--    - Campo JSON: materiais_complementares
-- 
-- 3. matriculas - Controle de matrículas (quem comprou o quê)
--    - Relacionamentos: usuario_id -> usuarios.id (CASCADE), produto_id -> produtos.id (SET NULL)
--    - Índices: usuario_id, produto_id, status, data_expiracao
--    - UNIQUE: (usuario_id, produto_id) - Evita duplicatas
-- 
-- 4. progresso_aulas - Gamificação (progresso do aluno)
--    - Relacionamentos: usuario_id -> usuarios.id (CASCADE), aula_id -> aulas.id (CASCADE)
--    - Índices: usuario_id, aula_id, (usuario_id, concluida)
--    - UNIQUE: (usuario_id, aula_id) - Evita duplicatas
-- 
-- NOTAS IMPORTANTES:
-- - Todas as tabelas usam utf8mb4_unicode_ci para suportar emojis
-- - Timestamps automáticos (created_at, updated_at)
-- - Foreign keys com CASCADE para manter integridade referencial
-- - Índices otimizados para consultas comuns (listar módulos/aulas, verificar matrícula, etc.)
-- 
-- ============================================================

COMMIT;





