// @ts-nocheck
import { useQueryClient, useMutation } from 'react-query';
import { useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
import t from './types';

// Common invalidate queries.
const commonInvalidateQueries = (queryClient) => {
  // Invalidate.
  queryClient.invalidateQueries(t.TRANSACTION_LOCKING);
  queryClient.invalidateQueries(t.TRANSACTIONS_LOCKING);
};

/**
 * Create a locking transactions.
 */
export function useCreateLockingTransactoin(props) {
  const queryClient = useQueryClient();
  const apiRequest = useApiRequest();

  return useMutation(
    (values) => apiRequest.put('transactions-locking/lock', values),
    {
      onSuccess: (res, values) => {
        // Common invalidate queries.
        commonInvalidateQueries(queryClient);
      },
      ...props,
    },
  );
}

/**
 * Create cancle locking transactions
 */
export function useCancelLockingTransaction(props) {
  const queryClient = useQueryClient();
  const apiRequest = useApiRequest();

  return useMutation(
    (values) => apiRequest.put('transactions-locking/cancel-lock', values),
    {
      onSuccess: (res, values) => {
        // Common invalidate queries.
        commonInvalidateQueries(queryClient);
      },
      ...props,
    },
  );
}

/**
 * Create a unlocking partial transactions.
 */
export function useCreateUnlockingPartialTransactions(props) {
  const queryClient = useQueryClient();
  const apiRequest = useApiRequest();
  return useMutation(
    (values) => apiRequest.put('transactions-locking/unlock-partial', values),
    {
      onSuccess: (res, values) => {
        // Common invalidate queries.
        commonInvalidateQueries(queryClient);
      },
      ...props,
    },
  );
}

/**
 * Create cancle unlocking partial transactions.
 */
export function useCancelUnlockingPartialTransactions(props) {
  const queryClient = useQueryClient();
  const apiRequest = useApiRequest();
  return useMutation(
    (values) =>
      apiRequest.put('transactions-locking/cancel-unlock-partial', values),
    {
      onSuccess: (res, values) => {
        // Common invalidate queries.
        commonInvalidateQueries(queryClient);
      },
      ...props,
    },
  );
}

/**
 * Retrive the transactions locking.
 */
export function useTransactionsLocking(query, props) {
  return useRequestQuery(
    [t.TRANSACTIONS_LOCKING, query],
    { method: 'get', url: 'transactions-locking', params: query },
    {
      select: (res) => res.data,
      defaultData: [],
      ...props,
    },
  );
}

export function useEditTransactionsLocking(query, props) {
  return useRequestQuery(
    [t.TRANSACTION_LOCKING, query],
    { method: 'get', url: `transactions-locking/${query}` },
    {
      select: (res) => res.data,
      defaultData: [],
      ...props,
    },
  );
}
