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<string | null>(null);

  async function refresh(): Promise<void> {
    supported.value = pushSupported();
    if (!supported.value) {
      enabled.value = false;
      return;
    }
    enabled.value = notificationPermission() === 'granted' && (await currentSubscription()) !== null;
  }

  async function toggle(): Promise<void> {
    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 };
});
