"use client";

import {
  useQuery,
  useQueryClient,
} from "@tanstack/react-query";

import { ApiError } from "@/lib/api/api-client";
import type { UserProfile } from "@/types/auth.types";
import { authApi } from "@/lib/api/auth-api";

export const AUTH_QUERY_KEY = ["auth", "profile"] as const;

export function useAuth() {
  const queryClient = useQueryClient();

  const profileQuery = useQuery({
    queryKey: AUTH_QUERY_KEY,
    queryFn: authApi.getProfile,
    retry: false,
    staleTime: 5 * 60 * 1000,
  });

  const user = profileQuery.data ?? null;

  const isUnauthorized =
    profileQuery.error instanceof ApiError &&
    profileQuery.error.status === 401;

  const isAuthenticated =
    !!user && !isUnauthorized;

  const refreshProfile = () => {
    return queryClient.invalidateQueries({
      queryKey: AUTH_QUERY_KEY,
    });
  };

  const clearProfile = () => {
    queryClient.removeQueries({
      queryKey: AUTH_QUERY_KEY,
    });
  };

  return {
    user,
    isAuthenticated,
    isLoading: profileQuery.isPending,
    isFetching: profileQuery.isFetching,
    isError: profileQuery.isError,
    isUnauthorized,
    error: profileQuery.error,
    refreshProfile,
    clearProfile,
  };
}