import * as Device from "expo-device";
import * as Notifications from "expo-notifications";
import { api } from "./api";

Notifications.setNotificationHandler({
  handleNotification: async () => ({
    shouldShowAlert: true,
    shouldPlaySound: true,
    shouldSetBadge: false,
  }),
});

export async function registerForPushAndSendToServer() {
  if (!Device.isDevice) return { ok: false, reason: "physical_device_required" };

  const { status: existingStatus } = await Notifications.getPermissionsAsync();
  let finalStatus = existingStatus;

  if (existingStatus !== "granted") {
    const { status } = await Notifications.requestPermissionsAsync();
    finalStatus = status;
  }

  if (finalStatus !== "granted") return { ok: false, reason: "permission_denied" };

  const token = (await Notifications.getExpoPushTokenAsync()).data;
  const platform = Device.osName?.toLowerCase().includes("ios") ? "ios" : "android";

  await api("/push/register", {
    method: "POST",
    auth: true,
    body: JSON.stringify({ token, platform }),
  });

  return { ok: true, token };
}
