import { defineStore } from 'pinia' import { ref } from 'vue' import type { Document } from '../../shared/types' import * as api from './api' const MAX_FILE_SIZE = 50 * 1024 * 1024 // 50 MB export const useDocumentStore = defineStore('document', () => { const documents = ref([]) const selectedId = ref(null) const uploading = ref(false) const error = ref(null) function clearError(): void { error.value = null } async function load(): Promise { try { error.value = null documents.value = await api.fetchDocuments() } catch (e) { error.value = (e as Error).message || 'Failed to load documents' console.error('Failed to load documents', e) } } async function upload(file: File): Promise { if (file.size > MAX_FILE_SIZE) { error.value = 'File too large (max 50 MB)' throw new Error(error.value) } uploading.value = true error.value = null try { const doc = await api.uploadDocument(file) documents.value.unshift(doc) selectedId.value = doc.id return doc } catch (e) { error.value = (e as Error).message || 'Failed to upload document' console.error('Failed to upload document', e) throw e } finally { uploading.value = false } } async function remove(id: string): Promise { try { await api.deleteDocument(id) documents.value = documents.value.filter((d) => d.id !== id) if (selectedId.value === id) selectedId.value = null } catch (e) { error.value = (e as Error).message || 'Failed to delete document' console.error('Failed to delete document', e) } } function select(id: string): void { selectedId.value = id } return { documents, selectedId, uploading, error, clearError, load, upload, remove, select } })