-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
106 lines (90 loc) · 3.84 KB
/
Copy pathapp.js
File metadata and controls
106 lines (90 loc) · 3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/* ARQUIVO: app.js */
// =======================================================
// A. LÓGICA DE INTERATIVIDADE DO DESIGN SYSTEM (DARK MODE)
// =======================================================
/**
* Alterna entre o Modo Claro e o Modo Escuro.
* Salva a preferência no Local Storage.
*/
function toggleTheme() {
const body = document.body;
const currentTheme = body.getAttribute('data-theme');
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
body.setAttribute('data-theme', newTheme);
localStorage.setItem('theme', newTheme);
// Atualiza o ícone (opcional)
const icon = document.querySelector('.theme-toggle i');
if (newTheme === 'dark') {
icon.classList.remove('fa-moon');
icon.classList.add('fa-sun');
} else {
icon.classList.remove('fa-sun');
icon.classList.add('fa-moon');
}
}
/**
* Carrega a preferência de tema do usuário ao carregar a página.
*/
document.addEventListener('DOMContentLoaded', () => {
const savedTheme = localStorage.getItem('theme') || 'light';
document.body.setAttribute('data-theme', savedTheme);
// Configuração inicial do ícone
const icon = document.querySelector('.theme-toggle i');
if (icon) {
if (savedTheme === 'dark') {
icon.classList.remove('fa-moon');
icon.classList.add('fa-sun');
} else {
icon.classList.remove('fa-sun');
icon.classList.add('fa-moon');
}
}
});
// =======================================================
// B. LÓGICA CONCEITUAL DO MOTOR DE RECOMENDAÇÃO (IA)
// =======================================================
/**
* Função simulada que inicia o processo de avaliação do usuário.
* Na implementação real, isso chamaria o Back-end/API de IA.
*/
function startAssessment() {
console.log("Iniciando avaliação de conhecimento para personalização...");
// Simulação de navegação para a tela de avaliação
// window.location.href = '/assessment';
alert("Avaliação iniciada! A próxima página usará IA para mapear seus pontos fortes e fracos.");
}
/**
* PSEUDO-CÓDIGO: Função de Back-end para o Motor de Recomendação de IA.
* Esta função demonstraria como a IA (ex: Gemini API) é usada.
* * @param {object} userProgress - Dados de progresso, acertos e erros do usuário.
* @param {string[]} availableModules - Lista de módulos de curso disponíveis.
* @returns {Promise<string[]>} - Módulos sugeridos pela IA.
*/
async function getAIRec_Engine(userProgress, availableModules) {
const API_ENDPOINT = 'https://api.synthlearn.com/v1/gemini-recommendation';
const GEMINI_PROMPT = `
Com base no progresso do usuário (userProgress), que mostra domínio em [X] e dificuldade em [Y],
e considerando os módulos disponíveis (availableModules),
aja como um tutor de IA e determine a próxima trilha de aprendizado ideal.
Priorize a correção das dificuldades (Y) com materiais de reforço e depois avance para o próximo tópico lógico.
Retorne uma lista JSON de 3 IDs de módulos.
`;
try {
const response = await fetch(API_ENDPOINT, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
prompt: GEMINI_PROMPT,
context: { userProgress, availableModules }
})
});
if (!response.ok) throw new Error('Falha na API de Recomendação de IA');
const data = await response.json();
// A API da IA retornaria a lista de IDs de módulos
return data.suggested_modules;
} catch (error) {
console.error("Erro no Motor de Recomendação de IA:", error);
// Retorno de fallback sem IA
return ['intro_module_1', 'intro_module_2', 'intro_module_3'];
}
}