"use client";

import {
  useMutation,
  useQuery,
  useQueryClient,
} from "@tanstack/react-query";

import {
  getEvaluationForm,
  updateEvaluationForm,
} from "../service/evaluation-form.service";

import type {
  UpdateEvaluationFormPayload,
} from "../types/evaluation-form.types";

export const evaluationFormKeys = {
  all: [
    "admin-evaluation-form",
  ] as const,

  detail: (
    assignmentId: number,
  ) =>
    [
      ...evaluationFormKeys.all,
      assignmentId,
    ] as const,
};

export function useEvaluationForm(
  assignmentId: number,
) {
  return useQuery({
    queryKey:
      evaluationFormKeys.detail(
        assignmentId,
      ),

    queryFn: () =>
      getEvaluationForm(
        assignmentId,
      ),

    enabled:
      Number.isFinite(
        assignmentId,
      ) &&
      assignmentId > 0,

    staleTime:
      0,

    refetchOnMount:
      "always",

    refetchOnWindowFocus:
      false,
  });
}

export function useUpdateEvaluationForm(
  assignmentId: number,
) {
  const queryClient =
    useQueryClient();

  return useMutation({
    mutationFn: (
      payload:
        UpdateEvaluationFormPayload,
    ) =>
      updateEvaluationForm(
        assignmentId,
        payload,
      ),

    onSuccess:
      async () => {
        await queryClient.invalidateQueries({
          queryKey:
            evaluationFormKeys.detail(
              assignmentId,
            ),
        });
      },
  });
}