import { useQuery } from "@tanstack/react-query";
import type { User } from "@supabase/supabase-js";

import { supabase } from "@/integrations/supabase/client";

export type Peran = "admin" | "user";

export type Sesi = {
  user: User | null;
  peran: Peran | null;
  nama: string;
};

export async function ambilSesi(): Promise<Sesi> {
  const { data } = await supabase.auth.getUser();
  const user = data.user ?? null;
  if (!user) return { user: null, peran: null, nama: "" };

  const [{ data: peranRows }, { data: profil }] = await Promise.all([
    supabase.from("user_roles").select("role").eq("user_id", user.id),
    supabase.from("profiles").select("nama").eq("id", user.id).maybeSingle(),
  ]);

  const peran: Peran = (peranRows ?? []).some((r) => r.role === "admin") ? "admin" : "user";
  return {
    user,
    peran,
    nama: profil?.nama || user.email?.split("@")[0] || "Pengguna",
  };
}

export function useSesi() {
  const q = useQuery({ queryKey: ["sesi"], queryFn: ambilSesi, staleTime: 60_000 });
  return {
    ...q,
    user: q.data?.user ?? null,
    peran: q.data?.peran ?? null,
    nama: q.data?.nama ?? "",
    isAdmin: q.data?.peran === "admin",
  };
}
