import type { MutationOptions } from "@tanstack/query-core";

import { type PayFeesErrorType, type PayFeesReturnType, payFees } from "../actions/payFees.js";
import type { Config } from "../createConfig.js";
import { ConfigRequiredError } from "../errors/base.js";
import type { Evaluate } from "../types/utils.js";
import type { Mutate, MutateAsync } from "./types.js";

export function payFeesRequestMutationOptions(config: Config | undefined) {
    return {
        mutationFn() {
            if (!config) throw new ConfigRequiredError("payFeesRequest");
            return payFees(config);
        },
        mutationKey: ["payFeesRequest"],
    } as const satisfies MutationOptions<PayFeesReturnType, PayFeesErrorType, void>;
}

export type PayFeesRequestData = PayFeesReturnType;

export type PayFeesRequestVariables = Evaluate<void>;

export type PayFeesRequestMutate<context = unknown> = Mutate<
    PayFeesRequestData,
    PayFeesErrorType,
    PayFeesRequestVariables,
    context
>;

export type PayFeesRequestMutateAsync<context = unknown> = MutateAsync<
    PayFeesRequestData,
    PayFeesErrorType,
    PayFeesRequestVariables,
    context
>;
