"use client";

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

import { verifyProviderDocumentApi } from "@/lib/api/provider.api";
import { getApiErrorMessage } from "@/lib/api/error";
import { queryKeys } from "@/lib/constants/query-keys";
import { useTranslation } from "@/hooks/useTranslation";
import { VerificationStatus } from "@/types/provider";
import type { VerifyDocumentRequest } from "@/types/provider";

interface VerifyDocumentVariables extends VerifyDocumentRequest {
  documentId: string;
}

/**
 * Approve / reject a single KYC document.
 *
 * Note the backend requires `rejectionReason` (min 3 chars) whenever status is
 * REJECTED and returns 400 otherwise — the review dialog collects it through
 * ConfirmDialog's `requireReason` mode.
 */
export function useVerifyProviderDocument(
  providerId: string,
  options?: { onSuccess?: () => void },
) {
  const { t } = useTranslation();
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: ({ documentId, ...payload }: VerifyDocumentVariables) =>
      verifyProviderDocumentApi(providerId, documentId, payload),
    onSuccess: (_data, variables) => {
      toast.success(
        variables.status === VerificationStatus.REJECTED
          ? t("providers.toast.documentRejected")
          : t("providers.toast.documentApproved"),
      );
      queryClient.invalidateQueries({
        queryKey: queryKeys.providers.detail(providerId),
      });
      options?.onSuccess?.();
    },
    onError: (error) => {
      toast.error(
        getApiErrorMessage(error, t("providers.toast.documentFailed")),
      );
    },
  });
}
