-- =============================================================================
-- TREINAMENTO EAD — Script para o BANCO DO CONDOMÍNIO
-- =============================================================================
-- Execute no db_name do condomínio (tabela condominios no banco principal).
-- NÃO execute no banco principal (acessos/condominios ficam lá).
--
-- usuario_id em treinamento_progresso = ID da tabela acessos (banco principal).
-- Por isso as views abaixo NÃO fazem JOIN com usuarios/acessos neste banco.
-- =============================================================================

-- Tabela de progresso do treinamento
CREATE TABLE IF NOT EXISTS `treinamento_progresso` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL COMMENT 'ID em acessos (banco principal)',
  `videos_assistidos` int(11) DEFAULT 0,
  `tempo_estudo` int(11) DEFAULT 0 COMMENT 'Tempo em minutos',
  `tempo_total_estudo` int(11) DEFAULT 0 COMMENT 'Alias legado — minutos',
  `pontuacao_quiz` int(11) DEFAULT 0 COMMENT 'Pontuação em porcentagem',
  `taxa_conclusao` int(11) DEFAULT 0 COMMENT 'Taxa de conclusão em porcentagem',
  `progresso_geral` decimal(5,2) DEFAULT 0 COMMENT 'Alias legado — percentual',
  `modulo_atual` varchar(50) DEFAULT 'basics',
  `ultima_atividade` datetime DEFAULT CURRENT_TIMESTAMP,
  `data_criacao` datetime DEFAULT CURRENT_TIMESTAMP,
  `data_atualizacao` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `certificado_gerado` tinyint(1) DEFAULT 0,
  `codigo_certificado` varchar(20) DEFAULT NULL,
  `data_conclusao` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `usuario_id` (`usuario_id`),
  KEY `idx_usuario_id` (`usuario_id`),
  KEY `idx_modulo_atual` (`modulo_atual`),
  KEY `idx_ultima_atividade` (`ultima_atividade`),
  KEY `idx_certificado` (`codigo_certificado`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Progresso do treinamento EAD por usuário (acessos.ID)';

-- Histórico de atividades
CREATE TABLE IF NOT EXISTS `treinamento_historico` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL,
  `acao` varchar(100) NOT NULL,
  `modulo` varchar(50) DEFAULT NULL,
  `detalhes` text DEFAULT NULL,
  `pontuacao` int(11) DEFAULT NULL,
  `data_acao` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_usuario_id` (`usuario_id`),
  KEY `idx_acao` (`acao`),
  KEY `idx_modulo` (`modulo`),
  KEY `idx_data_acao` (`data_acao`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Vídeos assistidos (Sala EAD)
CREATE TABLE IF NOT EXISTS `treinamento_videos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL,
  `video_id` varchar(100) NOT NULL,
  `modulo` varchar(50) NOT NULL,
  `titulo` varchar(255) NOT NULL,
  `duracao` int(11) DEFAULT 0,
  `tempo_assistido` int(11) DEFAULT 0,
  `concluido` tinyint(1) DEFAULT 0,
  `data_inicio` datetime DEFAULT CURRENT_TIMESTAMP,
  `data_conclusao` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `usuario_video` (`usuario_id`, `video_id`),
  KEY `idx_usuario_id` (`usuario_id`),
  KEY `idx_modulo` (`modulo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Certificados (opcional — certificado também pode ficar em treinamento_progresso)
CREATE TABLE IF NOT EXISTS `treinamento_certificados` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL,
  `certificado_hash` varchar(255) NOT NULL,
  `pontuacao_final` int(11) NOT NULL,
  `data_conclusao` datetime DEFAULT CURRENT_TIMESTAMP,
  `data_emissao` datetime DEFAULT CURRENT_TIMESTAMP,
  `status` enum('ativo','inativo') DEFAULT 'ativo',
  PRIMARY KEY (`id`),
  UNIQUE KEY `certificado_hash` (`certificado_hash`),
  KEY `idx_usuario_id` (`usuario_id`),
  KEY `idx_data_conclusao` (`data_conclusao`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Configurações
CREATE TABLE IF NOT EXISTS `treinamento_configuracoes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `chave` varchar(100) NOT NULL,
  `valor` text DEFAULT NULL,
  `descricao` text DEFAULT NULL,
  `tipo` enum('string','integer','boolean','json') DEFAULT 'string',
  `data_criacao` datetime DEFAULT CURRENT_TIMESTAMP,
  `data_atualizacao` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `chave` (`chave`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `treinamento_configuracoes` (`chave`, `valor`, `descricao`, `tipo`) VALUES
('treinamento_ativo', '1', 'Se o sistema de treinamento está ativo', 'boolean'),
('pontuacao_minima_certificado', '70', 'Pontuação mínima para obter certificado', 'integer'),
('tempo_minimo_video', '30', 'Tempo mínimo em segundos para considerar vídeo assistido', 'integer'),
('max_tentativas_quiz', '3', 'Número máximo de tentativas no quiz', 'integer'),
('configuracoes_videos', '{"autoplay": false, "showControls": true, "allowFullscreen": true}', 'Configurações dos vídeos', 'json'),
('textos_personalizados', '{"pageTitle": "Sala de Aula EAD", "pageSubtitle": "Treinamento 100% online"}', 'Textos personalizáveis', 'json')
ON DUPLICATE KEY UPDATE
  `valor` = VALUES(`valor`),
  `descricao` = VALUES(`descricao`),
  `tipo` = VALUES(`tipo`);

-- =============================================================================
-- VIEWS — apenas tabelas deste banco (sem JOIN em usuarios/acessos)
-- =============================================================================

CREATE OR REPLACE VIEW `v_treinamento_estatisticas` AS
SELECT
    tp.usuario_id,
    COALESCE(tp.videos_assistidos, 0) AS videos_assistidos,
    COALESCE(tp.tempo_estudo, tp.tempo_total_estudo, 0) AS tempo_estudo,
    COALESCE(tp.pontuacao_quiz, 0) AS pontuacao_quiz,
    COALESCE(tp.taxa_conclusao, tp.progresso_geral, 0) AS taxa_conclusao,
    tp.modulo_atual,
    tp.ultima_atividade,
    tp.certificado_gerado,
    tp.codigo_certificado,
    tp.data_conclusao,
    CASE
        WHEN COALESCE(tp.taxa_conclusao, tp.progresso_geral, 0) >= 100 THEN 'Concluído'
        WHEN COALESCE(tp.taxa_conclusao, tp.progresso_geral, 0) >= 75 THEN 'Avançado'
        WHEN COALESCE(tp.taxa_conclusao, tp.progresso_geral, 0) >= 50 THEN 'Intermediário'
        WHEN COALESCE(tp.taxa_conclusao, tp.progresso_geral, 0) >= 25 THEN 'Iniciante'
        ELSE 'Novo'
    END AS status_progresso,
    CASE
        WHEN tp.certificado_gerado = 1 OR tc.id IS NOT NULL THEN 'Sim'
        ELSE 'Não'
    END AS possui_certificado
FROM treinamento_progresso tp
LEFT JOIN treinamento_certificados tc
    ON tc.usuario_id = tp.usuario_id AND tc.status = 'ativo';

CREATE OR REPLACE VIEW `v_treinamento_atividades` AS
SELECT
    th.id,
    th.usuario_id,
    th.acao,
    th.modulo,
    th.pontuacao,
    th.data_acao,
    DATE(th.data_acao) AS data,
    HOUR(th.data_acao) AS hora
FROM treinamento_historico th
ORDER BY th.data_acao DESC;

-- Índices compostos (ignore erro se já existirem)
-- CREATE INDEX idx_treinamento_progresso_usuario_modulo ON treinamento_progresso (usuario_id, modulo_atual);
-- CREATE INDEX idx_treinamento_historico_usuario_data ON treinamento_historico (usuario_id, data_acao);
-- CREATE INDEX idx_treinamento_certificados_usuario_status ON treinamento_certificados (usuario_id, status);

-- Verificação
SELECT
    TABLE_NAME,
    TABLE_ROWS,
    CREATE_TIME,
    UPDATE_TIME
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME LIKE 'treinamento_%'
ORDER BY TABLE_NAME;
