import { defineStore } from 'pinia' import api from '../axiosPostulante' export const useExamenStore = defineStore('examenStore', { state: () => ({ procesos: [], areas: [], examenActual: null, preguntas: [], cargando: false, error: null, }), actions: { // 1. Obtener procesos disponibles para el postulante async fetchProcesos() { try { this.cargando = true const { data } = await api.get('/examen/procesos') this.procesos = data } catch (e) { this.error = e.response?.data?.message || e.message } finally { this.cargando = false } }, // 2. Obtener áreas por proceso 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 } }, // 3. Crear examen (sin preguntas) 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 } }, // 4. Obtener examen actual 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 } }, // 5. Generar preguntas para un examen 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 } }, // 6. Iniciar examen 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 } }, // 7. Responder pregunta async responderPregunta(preguntaId, respuesta) { try { const { data } = await api.post(`/examen/pregunta/${preguntaId}/responder`, { respuesta }) // Actualizar pregunta local si es necesario const index = this.preguntas.findIndex(p => p.id === preguntaId) if (index !== -1) this.preguntas[index].respuesta = respuesta return data } catch (e) { this.error = e.response?.data?.message || e.message return { success: false, message: this.error } } }, // 8. Finalizar examen async finalizarExamen(examenId) { try { const { data } = await api.post(`/examen/${examenId}/finalizar`) this.examenActual = null this.preguntas = [] return data } catch (e) { this.error = e.response?.data?.message || e.message return { success: false, message: this.error } } }, // Limpiar estado resetStore() { this.procesos = [] this.areas = [] this.examenActual = null this.preguntas = [] this.cargando = false this.error = null } } })