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

import {
    type CreateOrderRequestErrorType,
    type CreateOrderRequestParameters,
    type CreateOrderRequestReturnType,
    createOrderRequest,
} from "../actions/createOrderRequest.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 createOrderRequestMutationOptions(config: Config | undefined) {
    return {
        mutationFn(variables) {
            if (!config) throw new ConfigRequiredError("createOrderRequest");
            return createOrderRequest(config, variables);
        },
        mutationKey: ["createOrderRequest"],
    } as const satisfies MutationOptions<
        CreateOrderRequestData,
        CreateOrderRequestErrorType,
        CreateOrderRequestVariables
    >;
}

export type CreateOrderRequestData = CreateOrderRequestReturnType;

export type CreateOrderRequestVariables = Evaluate<CreateOrderRequestParameters>;

export type CreateOrderRequestMutate<context = unknown> = Mutate<
    CreateOrderRequestData,
    CreateOrderRequestErrorType,
    CreateOrderRequestVariables,
    context
>;

export type CreateOrderRequestMutateAsync<context = unknown> = MutateAsync<
    CreateOrderRequestData,
    CreateOrderRequestErrorType,
    CreateOrderRequestVariables,
    context
>;
