import { defineBoot } from "#q-app/wrappers";
import { Capacitor } from "@capacitor/core";
import { PushNotifications } from "@capacitor/push-notifications";
import { useAuth } from "src/composables/useAuth";
import { usePushNotifications } from "src/composables/usePushNotifications";

export default defineBoot(({ router }) => {
  if (!Capacitor.isNativePlatform()) {
    return;
  }

  const { requestPermissionAndRegister, setDeviceToken, syncDeviceToken } =
    usePushNotifications();

  PushNotifications.addListener("registration", async (token) => {
    setDeviceToken(token.value);

    // Se o app abriu já autenticado, envia agora; caso contrário o envio
    // acontece no login (useAuth), quando o access token existir.
    await syncDeviceToken();
  });

  PushNotifications.addListener("registrationError", () => {
    // falha silenciosa
  });

  // Ao tocar em uma push, reconsulta a aprovação: se o cadastro acabou de ser
  // aprovado, a dashboard completa é liberada sem exigir novo login.
  PushNotifications.addListener("pushNotificationActionPerformed", async () => {
    try {
      const approved = await useAuth().refreshApprovalStatus();

      if (!approved) {
        return;
      }

      await router.replace({ name: "DashboardPage", query: { approved: "true" } });
    } catch (error) {
      console.error(error);
    }
  });

  requestPermissionAndRegister();
});
