"use client";

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

import {
  hasPermission,
  type AuthPermission,
} from "@/features/auth/auth-data";
import { getAuthSession } from "@/features/auth/service/auth-service";

const AUTH_SESSION_QUERY_KEY = ["auth", "session"] as const;
const EMPTY_PERMISSIONS: AuthPermission[] = [];

export function usePermissions() {
  const sessionQuery = useQuery({
    queryKey: AUTH_SESSION_QUERY_KEY,
    queryFn: getAuthSession,
    staleTime: 0,
    refetchOnMount: "always",
  });

  const permissions = sessionQuery.data?.permissions ?? EMPTY_PERMISSIONS;

  const can = useCallback(
    (permission: AuthPermission) =>
      hasPermission(permissions, permission.action, permission.subject),
    [permissions],
  );

  return {
    can,
    error: sessionQuery.error,
    isLoading: sessionQuery.isLoading,
    permissions,
    role: sessionQuery.data?.role ?? null,
  };
}
