import { defineStore } from 'pinia' import { ref } from 'vue' import type { Submission, SubmissionFile } from '@/types' import { submissionHelpers } from '@/services/apiService' import { usePuzzlesStore } from './puzzles' export const useSubmissionsStore = defineStore('submissions', () => { // State const submissions = ref([]) const isLoading = ref(false) const error = ref('') const isSubmissionModalOpen = ref(false) // Actions const loadSubmissions = async (limit = 20, offset = 0) => { try { isLoading.value = true error.value = '' const loadedSubmissions = await submissionHelpers.loadSubmissions(limit, offset) if (offset === 0) { submissions.value = loadedSubmissions } else { submissions.value.push(...loadedSubmissions) } } catch (err) { error.value = 'Failed to load submissions' console.error('Error loading submissions:', err) } finally { isLoading.value = false } } const createSubmission = async ( files: SubmissionFile[], notes?: string, manualValidationRequested?: boolean ): Promise => { try { isLoading.value = true error.value = '' const puzzlesStore = usePuzzlesStore() const response = await submissionHelpers.createFromFiles( files, puzzlesStore.puzzles, notes, manualValidationRequested ) if (response.error) { error.value = response.error throw new Error(response.error) } if (response.data) { // Add to local submissions list submissions.value.unshift(response.data) return response.data } return undefined } catch (err) { error.value = err instanceof Error ? err.message : 'Failed to create submission' throw err } finally { isLoading.value = false } } const openSubmissionModal = () => { isSubmissionModalOpen.value = true } const closeSubmissionModal = () => { isSubmissionModalOpen.value = false } const refreshSubmissions = async () => { submissions.value = [] await loadSubmissions() } return { // State submissions, isLoading, error, isSubmissionModalOpen, // Actions loadSubmissions, createSubmission, openSubmissionModal, closeSubmissionModal, refreshSubmissions } })