// frontend/student-script.js
// Navigation for Student Portal
document.addEventListener("DOMContentLoaded", () => {
  // Mobile menu toggle
  const mobileMenuToggle = document.getElementById("mobileMenuToggleStudent")
  const sidebar = document.getElementById("sidebarStudent")

  if (mobileMenuToggle) {
    mobileMenuToggle.addEventListener("click", () => {
      sidebar.classList.toggle("open")
    })
  }

  // Navigation items
  const navItems = document.querySelectorAll(".nav-item")
  const views = document.querySelectorAll(".view")

  navItems.forEach((item) => {
    item.addEventListener("click", function (e) {
      e.preventDefault()

      // Remove active class from all nav items
      navItems.forEach((nav) => nav.classList.remove("active"))

      // Add active class to clicked item
      this.classList.add("active")

      // Get the view to show
      const viewName = this.getAttribute("data-view");
      if (viewName === 'student-mis-solicitudes') {
      cargarResultados();
      }

      // Hide all views
      views.forEach((view) => view.classList.remove("active"))

      // Show the selected view
      const selectedView = document.getElementById(`${viewName}-view`)
      if (selectedView) {
        selectedView.classList.add("active")
      }

      // Close mobile menu if open
      if (window.innerWidth <= 1024) {
        sidebar.classList.remove("open")
      }
    })
  })

  // Close sidebar when clicking outside on mobile
  document.addEventListener("click", (e) => {
    if (window.innerWidth <= 1024) {
      if (!sidebar.contains(e.target) && !mobileMenuToggle.contains(e.target)) {
        sidebar.classList.remove("open")
      }
    }
  })

  // Add animation to cards on scroll
  const observerOptions = {
    threshold: 0.1,
    rootMargin: "0px 0px -50px 0px",
  }

  const observer = new IntersectionObserver((entries) => {
    entries.forEach((entry) => {
      if (entry.isIntersecting) {
        entry.target.style.opacity = "1"
        entry.target.style.transform = "translateY(0)"
      }
    })
  }, observerOptions)

  // Observe all cards
  document.querySelectorAll(".card, .stat-card, .quick-action-card, .notification-item").forEach((card) => {
    card.style.opacity = "0"
    card.style.transform = "translateY(20px)"
    card.style.transition = "opacity 0.5s ease, transform 0.5s ease"
    observer.observe(card)
  })

  // FAQ accordion functionality
  const faqItems = document.querySelectorAll('.faq-item')
  faqItems.forEach(item => {
    const question = item.querySelector('.faq-question')
    if (question) {
      question.addEventListener('click', () => {
        const wasActive = item.classList.contains('active')
        
        // Close all FAQ items
        faqItems.forEach(faq => faq.classList.remove('active'))
        
        // Toggle current item
        if (!wasActive) {
          item.classList.add('active')
        }
      })
    }
  })
})

// Logout function
function logout() {
  sessionStorage.clear()
  window.location.href = "index.html"
}

// ============================================
// CHATBOT FUNCTIONALITY
// ============================================

const chatbotKnowledgeBase = {
  "como solicito una beca": {
    response:
      "Para solicitar una beca, sigue estos pasos:\n\n1. Inicia sesión en el sistema\n2. Ve a la sección 'Convocatorias' y revisa las becas disponibles\n3. Verifica que cumples con los requisitos\n4. Haz clic en 'Solicitar Beca' y completa el formulario\n5. Sube todos los documentos requeridos\n6. Envía tu solicitud antes de la fecha límite\n\n¿Necesitas ayuda con algún paso específico?",
  },
  "que documentos necesito": {
    response:
      "Los documentos básicos requeridos son:\n\n• Identificación oficial vigente\n• Constancia de estudios del período actual\n• Historial académico (Kardex)\n• Comprobante de domicilio (no mayor a 3 meses)\n• Fotografía tamaño infantil\n• Carta de motivos\n• Comprobante de ingresos familiares (para beca socioeconómica)\n\nTodos los documentos deben estar en formato PDF, JPG o PNG, con un tamaño máximo de 5 MB.",
  },
  "cuanto tarda el proceso": {
    response:
      "El proceso completo de evaluación toma aproximadamente:\n\n• Revisión de documentos: 3-5 días hábiles\n• Análisis socioeconómico: 10-15 días hábiles\n• Evaluación académica: 5-7 días hábiles\n• Sesión de comité: según calendario\n• Comunicación de resultados: 2-3 días después del comité\n\nEn total, el proceso puede tomar de 4 a 6 semanas. Recibirás notificaciones en cada etapa.",
  },
  "como renuevo mi beca": {
    response:
      "Para renovar tu beca:\n\n1. Asegúrate de cumplir con todos los requisitos académicos (promedio mínimo, créditos, asistencia)\n2. Ve a la sección 'Renovar Beca' cuando se abra el período de renovación\n3. Actualiza tu información y documentos si es necesario\n4. Envía tu solicitud de renovación\n\nEl período de renovación generalmente abre 2 meses antes del inicio del nuevo cuatrimestre. Te notificaremos cuando esté disponible.",
  },
  "tipos de becas": {
    response:
      "Ofrecemos los siguientes tipos de becas:\n\n• Becas Académicas: Para estudiantes con excelencia académica (50%-100% de colegiatura)\n• Becas Socioeconómicas: Apoyo para estudiantes en situación de vulnerabilidad (25%-100%)\n• Becas Deportivas: Para atletas destacados que representen a la universidad (30%-75%)\n• Becas Culturales: Para estudiantes destacados en actividades artísticas y culturales\n\nCada tipo tiene requisitos específicos. ¿Sobre cuál te gustaría saber más?",
  },
  "requisitos academicos": {
    response:
      "Los requisitos académicos generales son:\n\n• Promedio mínimo: 8.0 para becas académicas, 7.5 para otras\n• Carga académica: Mínimo 12 créditos por semestre\n• Asistencia: Mínimo 90% en todas las materias\n• Sin materias reprobadas en el período actual\n• Estar inscrito como estudiante regular\n\nLos requisitos específicos pueden variar según el tipo de beca.",
  },
  contacto: {
    response:
      "Puedes contactarnos por:\n\n📧 Email: becas@universidad.edu\n📞 Teléfono: (555) 123-4567\n🏢 Oficina: Edificio Administrativo, 2do piso\n🕐 Horario: Lun-Vie 9:00 AM - 5:00 PM\n\nTambién puedes enviar un mensaje desde la sección de Ayuda en tu portal de estudiante.",
  },
  "beca rechazada": {
    response:
      "Si tu beca fue rechazada:\n\n1. Revisa los motivos del rechazo en la notificación que recibiste\n2. Puedes presentar una apelación dentro de los 5 días hábiles siguientes\n3. Proporciona evidencia adicional que respalde tu caso\n4. Contacta a la oficina de becas para orientación personalizada\n\nRecuerda que puedes aplicar nuevamente en la siguiente convocatoria.",
  },
  cuatrimestres: {
    response:
      "El sistema de becas funciona por cuatrimestres:\n\n• 2024-1: Enero - Abril\n• 2024-2: Mayo - Agosto\n• 2024-3: Septiembre - Diciembre\n\nCada cuatrimestre tiene su propia convocatoria y proceso de evaluación. Tu desempeño se evalúa por cuatrimestre para renovaciones.",
  },
  horarios: {
    response:
      "Horarios de atención:\n\n🏢 Oficina de Becas:\nLunes a Viernes: 9:00 AM - 5:00 PM\n\n💬 Asistente Virtual:\nDisponible 24/7\n\n📞 Línea telefónica:\nLunes a Viernes: 9:00 AM - 5:00 PM\n\nFuera de horario, puedes enviar un correo y te responderemos en 24-48 horas.",
  },
}

function toggleChatbot() {
  const widget = document.getElementById("chatbotWidget")
  const button = document.getElementById("chatbotButton")

  if (widget && button) {
    if (widget.classList.contains("active")) {
      widget.classList.remove("active")
      button.classList.remove("hidden")
    } else {
      widget.classList.add("active")
      button.classList.add("hidden")
    }
  }
}

function sendMessage() {
  const input = document.getElementById("chatbotInput")
  if (!input) return
  
  const message = input.value.trim()

  if (message) {
    addUserMessage(message)
    input.value = ""

    setTimeout(() => {
      const response = getBotResponse(message)
      addBotMessage(response)
    }, 500)
  }
}

function sendQuickReply(message) {
  addUserMessage(message)

  setTimeout(() => {
    const response = getBotResponse(message)
    addBotMessage(response)
  }, 500)
}

function handleChatKeyPress(event) {
  if (event.key === "Enter") {
    sendMessage()
  }
}

function addUserMessage(message) {
  const messagesContainer = document.getElementById("chatbotMessages")
  if (!messagesContainer) return
  
  const messageDiv = document.createElement("div")
  messageDiv.className = "chatbot-message user"
  messageDiv.innerHTML = `
    <div class="message-content">
      <p>${escapeHtml(message)}</p>
    </div>
    <div class="message-avatar">👤</div>
  `
  messagesContainer.appendChild(messageDiv)
  scrollToBottom()
}

function addBotMessage(message) {
  const messagesContainer = document.getElementById("chatbotMessages")
  if (!messagesContainer) return
  
  const messageDiv = document.createElement("div")
  messageDiv.className = "chatbot-message bot"
  messageDiv.innerHTML = `
    <div class="message-avatar">🤖</div>
    <div class="message-content">
      <p>${escapeHtml(message).replace(/\n/g, "<br>")}</p>
    </div>
  `
  messagesContainer.appendChild(messageDiv)
  scrollToBottom()
}

function getBotResponse(userMessage) {
  const normalizedMessage = userMessage
    .toLowerCase()
    .normalize("NFD")
    .replace(/[\u0300-\u036f]/g, "")

  // Check for keywords in knowledge base
  for (const [key, value] of Object.entries(chatbotKnowledgeBase)) {
    if (normalizedMessage.includes(key.replace(/ /g, "")) || normalizedMessage.includes(key)) {
      return value.response
    }
  }

  // Check for greetings
  if (normalizedMessage.match(/hola|buenos dias|buenas tardes|buenas noches|hey|hi/)) {
    return "¡Hola! ¿En qué puedo ayudarte hoy? Puedo responder preguntas sobre:\n\n• Cómo solicitar una beca\n• Documentos requeridos\n• Tipos de becas disponibles\n• Proceso de renovación\n• Requisitos académicos\n• Contacto y horarios"
  }

  // Check for thanks
  if (normalizedMessage.match(/gracias|muchas gracias|thank you|thanks/)) {
    return "¡De nada! Si tienes más preguntas, no dudes en consultarme. Estoy aquí para ayudarte. 😊"
  }

  // Check for goodbye
  if (normalizedMessage.match(/adios|hasta luego|chao|bye|nos vemos/)) {
    return "¡Hasta luego! Que tengas un excelente día. Recuerda que puedes consultarme cuando lo necesites. 👋"
  }

  // Default response
  return "Entiendo tu pregunta, pero no tengo una respuesta específica para eso. Te recomiendo:\n\n• Contactar directamente a la oficina de becas: becas@universidad.edu\n• Llamar al (555) 123-4567\n• Visitar la oficina en el Edificio Administrativo, 2do piso\n\n¿Hay algo más en lo que pueda ayudarte?"
}

function scrollToBottom() {
  const messagesContainer = document.getElementById("chatbotMessages")
  if (messagesContainer) {
    messagesContainer.scrollTop = messagesContainer.scrollHeight
  }
}

function escapeHtml(text) {
  const map = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#039;'
  }
  return text.replace(/[&<>"']/g, m => map[m])
}

const API_BASE = window.API_CONFIG.API_BASE_URL;

async function apiFetch(path, options = {}) {
  const url = `${API_BASE}${path}`;
  const response = await fetch(url, options);
  if (!response.ok) {
    throw new Error(`Error ${response.status}`);
  }
  return response.json();
}

document.addEventListener('DOMContentLoaded', () => {
  const form = document.querySelector('.scholarship-form');
  form.addEventListener('submit', async (e) => {
    e.preventDefault();
    // Obtén el id del estudiante guardado en sessionStorage o de donde corresponda
    const studentId = sessionStorage.getItem('studentId');
    const convocatoriaSelect = form.querySelector('select[name="convocatoria"]');
    const idConvocatoria = convocatoriaSelect.value;
    try {
      const data = await apiFetch(`/estudiantes/${studentId}/solicitudes`, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ id_convocatoria: idConvocatoria })
      });
      alert(`Solicitud creada (ID: ${data.id_solicitud})`);
    } catch (err) {
      alert('Hubo un problema al enviar la solicitud');
      console.error(err);
    }
  });
});

async function subirDocumento(idSolicitud, idDocumento, file) {
  const formData = new FormData();
  formData.append('file', file);
  formData.append('id_documento', idDocumento);

  await apiFetch(`/solicitudes/${idSolicitud}/documentos`, {
    method: 'POST',
    body: formData
  });
  alert('Documento subido con éxito');
}

async function enviarApelacion(idSolicitud, motivo) {
  await apiFetch(`/solicitudes/${idSolicitud}/apelaciones`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ motivo })
  });
  alert('Apelación enviada');
}

async function registrarSuspension(idBeca, fechaInicio, fechaFin, motivo) {
  await apiFetch(`/becas/${idBeca}/suspensiones`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ fecha_inicio: fechaInicio, fecha_fin: fechaFin, motivo })
  });
  alert('Suspensión registrada');
}

async function cargarResultados() {
  // Recuperamos el ID del estudiante desde sessionStorage
  const id = sessionStorage.getItem('studentId');
  if (!id) {
    console.warn('No se encontró studentId en sessionStorage');
    return;
  }

  try {
    const data = await apiFetch(`/resultados/${id}`);
    const lista = document.querySelector('.solicitudes-list');
    lista.innerHTML = ''; // vaciamos la lista previa

    data.resultados.forEach(item => {
      // Determinamos el estado a mostrar (decisión o estado de la solicitud)
      const estado = item.decision || item.estado_solicitud || 'En revisión';
      const badgeClass = item.decision
        ? 'badge-success'
        : estado.toLowerCase().includes('rech')
        ? 'badge-danger'
        : 'badge-secondary';

      // Construimos la tarjeta de la solicitud
      const card = document.createElement('div');
      card.className = 'solicitud-card';
      card.innerHTML = `
        <div class="solicitud-header">
          <div>
            <h3>Solicitud #${item.id_solicitud}</h3>
            <p class="text-muted">${item.fecha || ''}</p>
          </div>
          <span class="badge ${badgeClass}">${estado}</span>
        </div>
        <div class="solicitud-body">
          <p>${item.motivo || ''}</p>
        </div>
      `;
      lista.appendChild(card);
    });
  } catch (err) {
    console.error('Error cargando resultados:', err);
  }
}
