import { defineStore } from 'pinia' import api from '../axiosPostulante' export const useExamenStore = defineStore('examenStore', { state: () => ({ procesos: [], areas: [], examenActual: null, preguntas: [], cargando: false, calificando: false, resultado: null, error: null, }), actions: { async fetchProcesos() { try { this.cargando = true const { data } = await api.get('/examen/procesos') this.procesos = (data || []).map(p => ({ ...p, requiere_pago: p.requiere_pago === 1 || p.requiere_pago === '1' || p.requiere_pago === true })) } catch (e) { this.error = e.response?.data?.message || e.message } finally { this.cargando = false } }, async fetchAreas(proceso_id) { try { this.cargando = true const { data } = await api.get('/examen/areas', { params: { proceso_id } }) this.areas = data } catch (e) { this.error = e.response?.data?.message || e.message } finally { this.cargando = false } }, async crearExamen(area_proceso_id, pago = null) { try { this.cargando = true const payload = { area_proceso_id, ...pago } const { data } = await api.post('/examen/crear', payload) this.examenActual = { id: data.examen_id } return data } catch (e) { this.error = e.response?.data?.message || e.message return { success: false, message: this.error } } finally { this.cargando = false } }, async fetchExamenActual() { try { this.cargando = true const { data } = await api.get('/examen/actual') this.examenActual = data.examen } catch (e) { this.error = e.response?.data?.message || e.message } finally { this.cargando = false } }, async generarPreguntas(examenId) { try { this.cargando = true const { data } = await api.post(`/examen/${examenId}/generar-preguntas`) return data } catch (e) { this.error = e.response?.data?.message || e.message return { success: false, message: this.error } } finally { this.cargando = false } }, async iniciarExamen(examenId) { try { this.cargando = true const { data } = await api.post('/examen/iniciar', { examen_id: examenId }) this.examenActual = data.examen this.preguntas = data.preguntas return data } catch (e) { this.error = e.response?.data?.message || e.message return { success: false, message: this.error } } finally { this.cargando = false } }, async responderPregunta(preguntaId, respuesta) { try { const { data } = await api.post(`/examen/pregunta/${preguntaId}/responder`, { respuesta }) const index = this.preguntas.findIndex(p => p.id === preguntaId) if (index !== -1 && data.success) { this.preguntas[index].respuesta = respuesta this.preguntas[index].es_correcta = data.correcta this.preguntas[index].puntaje = data.puntaje } return data } catch (e) { this.error = e.response?.data?.message || e.message return { success: false, message: this.error } } }, async calificarExamen(examenId) { try { this.error = null this.calificando = true const { data } = await api.post(`/examen/${examenId}/calificar`) if (data?.success) { this.resultado = { examen_id: data.examen_id, proceso_id: data.proceso_id, total_puntos: data.total_puntos, total_correctas: data.total_correctas, total_incorrectas: data.total_incorrectas, total_nulas: data.total_nulas, porcentaje_correctas: data.porcentaje_correctas, calificacion_sobre_20: data.calificacion_sobre_20, orden_merito: data.orden_merito, correctas_por_curso: data.correctas_por_curso, incorrectas_por_curso: data.incorrectas_por_curso, preguntas_totales_por_curso: data.preguntas_totales_por_curso, } return data } this.error = data?.mensaje || data?.message || 'No se pudo calificar el examen.' return { success: false, message: this.error } } catch (e) { const msg = e.response?.data?.mensaje || e.response?.data?.message || e.message this.error = msg return { success: false, message: msg, status: e.response?.status } } finally { this.calificando = false } }, async finalizarExamen(examenId) { try { const { data } = await api.post(`/examen/${examenId}/finalizar`) if (data?.success) { if (this.examenActual) { this.examenActual.estado = 'finalizado' this.examenActual.hora_fin = new Date().toISOString() } this.examenActual = null this.preguntas = [] this.error = null } return data } catch (e) { this.error = e.response?.data?.message || e.message return { success: false, message: this.error } } }, resetStore() { this.procesos = [] this.areas = [] this.examenActual = null this.preguntas = [] this.cargando = false this.calificando = false this.resultado = null this.error = null } } })