"use client";

import { useCallback } from "react";
import { useQuery } from "@tanstack/react-query";

import {
  getCurrentUser,
  type CurrentUser,
} from "@/features/auth/service/auth-service";

export const CURRENT_USER_QUERY_KEY = [
  "current-user",
] as const;

export type { CurrentUser };

export function useCurrentUser() {
  const query = useQuery({
    queryKey: CURRENT_USER_QUERY_KEY,
    queryFn: getCurrentUser,
  });

  const queryRefetch = query.refetch;

  const refetch =
    useCallback(async (): Promise<void> => {
      await queryRefetch();
    }, [queryRefetch]);

  return {
    user: query.data ?? null,

    isLoading: query.isLoading,

    isFetching: query.isFetching,

    error: query.error
      ? query.error instanceof Error
        ? query.error.message
        : "Unable to load the current user."
      : null,

    refetch,
  };
}