// --- GEMINI API SETUP --- const GEMINI_API_KEY="AIzaSyC4Fjtv0kAhKfAmkI3pQQ56vx7h7jlhCR4"; var animo = ''; let advices = null; let advice = null; let apps = null; var adviceController = false; // Función helper para llamar a Gemini async function callGemini(promptText) { try { const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${GEMINI_API_KEY}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ contents: [{ parts: [{ text: promptText }] }] }) }); if (!response.ok) throw new Error('Error en la API'); const data = await response.json(); return data.candidates[0].content.parts[0].text; } catch (error) { console.error("Error llamando a Gemini:", error); return null; } } // --- NUEVO: FUNCIÓN DE CONSEJO PERSONALIZADO (IA) --- async function consultarIA() { const input = document.getElementById('ai-mood-input').value.trim(); const resultBox = document.getElementById('ai-response-container'); if (!input) { alert("Por favor, escribe brevemente cómo te sientes."); return; } // Estado de carga resultBox.style.display = 'block'; resultBox.innerText = "✨ Conectando con tu guía interior... (Procesando)"; const prompt = ` Actúa como un consejero de salud mental empático y cálido llamado "PsicoGuía". El usuario dice: "${input}". Tu tarea: 1. Valida sus sentimientos en 1 o 2 frases cortas y cálidas. 2. Sugiere UNA acción inmediata muy simple (respiración, tomar agua, ver el cielo). 3. Mantén el tono suave, no médico, sino de acompañamiento. 4. Responde en Español. `; const respuesta = await callGemini(prompt); if (respuesta) { resultBox.innerText = respuesta; } else { resultBox.innerText = "Lo siento, la conexión con la guía falló. Intenta respirar profundo y probar de nuevo."; } } // --- NUEVO: FUNCIÓN DE MISIÓN ECOLÓGICA MÁGICA (IA) --- async function generarMisionIA() { const missionText = document.getElementById('green-mission-text'); missionText.innerText = "✨ Creando misión mágica..."; const prompt = ` Genera una "micro-misión ecológica" única para una persona que busca bienestar. Debe ser: 1. Muy fácil de hacer en menos de 5 minutos. 2. Conectada con la naturaleza o el cuidado del entorno. 3. Con un tono poético o inspirador. 4. Máximo 15 palabras. Ejemplos: "Encuentra una hoja seca y agradece su ciclo de vida", "Riega una planta y dile palabras de aliento". `; const respuesta = await callGemini(prompt); if (respuesta) { // Limpiamos comillas extra si la IA las pone missionText.innerText = `"${respuesta.replace(/"/g, '')}"`; } else { missionText.innerText = '"Abraza un árbol cercano y siente su calma."'; } } // --- 1. BASE DE DATOS LOCAL --- var bdRecursos = [ { id: 1, tag: 'ansiedad', titulo: 'Playlist: Calma tu ansiedad', tipo: 'Web', link: 'https://open.spotify.com/playlist/6bT8zo10MdHsESTQNPXFW8?si=mqr7BTHLQBG7fPayRbniCw&pi=FOFcWn5zTGqt6' }, { id: 2, tag: 'ansiedad', titulo: 'Playlist: Calm your Anxiety', tipo: 'Web', link: 'https://open.spotify.com/playlist/1y5R84CnSLoLcSRb4WCFAB?si=ZqrqfbMzQMSbRvvCUmN0vA&pi=efONrH3PQzGg8'}, { id: 3, tag: 'ansiedad', titulo: 'App Rootd', tipo: 'App', link: "#", appCat:"Ansiedad", appName:"Rootd" }, { id: 4, tag: 'tristeza', titulo: 'Playlist: Rayito de Sol', tipo: 'Web', link: "https://open.spotify.com/playlist/6Ud5HZrCWAaUrhAS3B1h0D?si=LNG5a0D9Q2KeonyOpTIy9g&pi=Q6D8v6ntRgWkL"}, { id: 5, tag: 'tristeza', titulo: 'Playlist: Sunshine State of Mind', tipo: 'Web', link: 'https://open.spotify.com/playlist/5QGFrabx7xXp7RMlMAxXn5?si=xvZnAQ3DQv-zckg-h_nHAA&pi=TWGXySOBRnOyo'}, { id: 6, tag: 'tristeza', titulo: 'App I am', tipo: 'App', link: '#', appCat:"Tristeza", appName:"Iam"}, { id: 7, tag: 'tristeza', titulo: 'Línea de la Vida (24h)', tipo: 'Teléfono', link: 'tel:5551234567' }, { id: 8, tag: 'soledad', titulo: 'Playlist: Voces Amigas', tipo: 'Web', link: 'https://open.spotify.com/playlist/4ijA8sf4ztxRjzlXEfWhb7?si=HEnHQgQRRT69fYnJ6Rg1gg&pi=icy9Z9pWR_-LH'}, { id: 9, tag: 'soledad', titulo: 'Playlist: Company in the Echo', tipo: 'Web', link: 'https://open.spotify.com/playlist/4oFkgJLEcCj23LBpjqncdb?si=qW8WkBxISxeGDrPRWX2OkA&pi=Gb_zArkARdqFh'}, //{ id: 6, tag: 'soledad', titulo: 'Comunidad Discord "Apoyo Mutuo"', tipo: 'Chat', link: '#' }, { id: 10, tag: 'soledad', titulo: 'App Yana', tipo: 'App', link: "#", appCat:"Soledad", appName:"Yana"}, { id: 11, tag: 'soledad', titulo: 'App Discord', tipo: 'App', link:"# ", appCat:"Soledad", appName:"Discord"}, { id: 12, tag: 'panico', titulo: 'Botón de Emergencia SOS', tipo: 'Urgencia', link: 'tel:911' }, { id: 13, tag: 'panico', titulo: 'App Rootd', tipo: 'App', link: "#", appCat:"Ansiedad", appName:"Rootd" }, ]; // --- 2. NAVEGACIÓN --- function irA(sectionId) { console.log("Navegando a sección:", sectionId); document.querySelectorAll('.section').forEach(sec => sec.classList.remove('active')); document.getElementById(sectionId).classList.add('active'); console.log("Sección activada:", sectionId); window.scrollTo(0, 0); } // --- 3. RECURSOS --- function filtrarRecursos() { var estadoAnimo = animo; const contenedor = document.getElementById('resources-list'); const titulo = document.getElementById('result-title'); contenedor.innerHTML = ''; const textos = { 'ansiedad': 'Para calmar tu mente...', 'tristeza': 'Un abrazo digital para ti...', 'soledad': 'Conectemos con otros...', 'panico': 'Respira, aquí tienes ayuda inmediata...' }; titulo.innerText = textos[estadoAnimo] || 'Recursos para ti'; const resultados = bdRecursos.filter(r => r.tag === estadoAnimo); if (resultados.length === 0) { contenedor.innerHTML = '
No encontramos recursos específicos.
'; } else { resultados.forEach(item => { const card = ` `); contenedor.innerHTML += card; }); } if (adviceController) { adviceConstructor(animo); irA('resources-section'); } irA('resources-section'); } // --- 4. LÓGICA DE REDIRECCIÓN Y TIMER --- let timerInterval = null; function prepararRedireccion() { const ciudadInput = document.getElementById('city-input').value.trim(); if (!ciudadInput) { alert("Por favor, escribe una ciudad para buscar."); return; } // Mostrar Modal const modal = document.getElementById('redirect-modal'); const timerDisplay = document.getElementById('countdown-timer'); modal.style.display = 'flex'; let timeLeft = 5; timerDisplay.innerText = timeLeft; // Iniciar Cuenta Regresiva timerInterval = setInterval(() => { timeLeft--; timerDisplay.innerText = timeLeft; if (timeLeft <= 0) { clearInterval(timerInterval); ejecutarRedireccion(); // Ocultar modal después de un momento para que al volver no siga ahí setTimeout(() => { modal.style.display = 'none'; }, 1000); } }, 1000); } function ejecutarRedireccion() { const especialidad = document.getElementById('specialty-input').value; const ciudadInput = document.getElementById('city-input').value.trim(); const ciudadFormateada = ciudadInput.toLowerCase() .normalize("NFD").replace(/[\u0300-\u036f]/g, "") .replace(/ /g, "-"); const urlDestino = `https://www.doctoralia.com.mx/${especialidad}/${ciudadFormateada}`; window.open(urlDestino, '_self'); } function cancelarRedireccion() { if (timerInterval) clearInterval(timerInterval); document.getElementById('redirect-modal').style.display = 'none'; } // --- 5. ENCUESTA PREVIA A RECURSOS --- function mostrarEncuesta(estadoAnimo) { animo = estadoAnimo; adviceController = false; irA('survey-section'); } function seleccionarRazon(razon) { let data = advices[animo][razon]; advice = data; adviceController = true; filtrarRecursos(); } function adviceConstructor() { //insertando el contenedopr de consejos como hijo const contenedor = document.getElementById('resources-list'); const contenedorConsejos = document.createElement('div'); contenedor.appendChild(contenedorConsejos); //lógica de consejos let pasoActual = 0; function renderAdvice() { const item = advice[pasoActual]['advice']; const esElPrimero = pasoActual === 0; const esElUltimo = pasoActual === advice.length - 1; const adviceLength = advice.length; const htmlTemplate = `${item}
${ adviceLength > 1 ? `