import { defineStore } from 'pinia'; import { ref } from 'vue'; import { currentSubscription, disablePush, enablePush, notificationPermission, pushSupported } from '../lib/push'; export const usePushStore = defineStore('push', () => { const supported = ref(pushSupported()); const enabled = ref(false); const busy = ref(false); /** null | 'denied' | 'unsupported' | message d'erreur */ const error = ref(null); async function refresh(): Promise { supported.value = pushSupported(); if (!supported.value) { enabled.value = false; return; } enabled.value = notificationPermission() === 'granted' && (await currentSubscription()) !== null; } async function toggle(): Promise { if (busy.value || !supported.value) return; busy.value = true; error.value = null; try { if (enabled.value) { await disablePush(); enabled.value = false; } else { const r = await enablePush(); enabled.value = r === 'enabled'; if (r !== 'enabled') error.value = r; } } catch (e) { error.value = e instanceof Error ? e.message : String(e); } finally { busy.value = false; } } return { supported, enabled, busy, error, refresh, toggle }; });