'use client';

// AUTO-GENERATED by openapi_processor / ts.hooks
// Disconnect OAuth provider
// DO NOT EDIT — re-run `make gen`.

import useSWRMutation from "swr/mutation";
import type { SWRMutationConfiguration } from "swr/mutation";
import { CfgAccountsOauth } from "../../sdk.gen";
import type { CfgAccountsOauthDisconnectCreateData, CfgAccountsOauthDisconnectCreateResponses } from "../../types.gen";
import { cfg_accounts_oauth_disconnect_response_200_AutoRefSchema } from "../schemas/cfg_accounts_oauth_disconnect_response_200_AutoRef";

type Args = Omit<CfgAccountsOauthDisconnectCreateData, "url">;
type Result = CfgAccountsOauthDisconnectCreateResponses[keyof CfgAccountsOauthDisconnectCreateResponses];

export function useCfgAccountsOauthDisconnectCreate(
  config?: SWRMutationConfiguration<Result, Error, readonly ["cfg_accounts_oauth_disconnect_create"], Args>,
) {
  return useSWRMutation<Result, Error, readonly ["cfg_accounts_oauth_disconnect_create"], Args>(
    ["cfg_accounts_oauth_disconnect_create"] as const,
    async (_key, { arg }: { arg: Args }) => {
      const res = await CfgAccountsOauth.cfgAccountsOauthDisconnectCreate({ ...arg, throwOnError: true } as never);
      const data = res.data as Result;
      const parsed = cfg_accounts_oauth_disconnect_response_200_AutoRefSchema.safeParse(data);
      if (!parsed.success) {
        // Log first so the failure is always visible, even if the
        // event handler swallows it.
        console.warn(
          "[zod] response did not match schema",
          {
            operation: "cfg_accounts_oauth_disconnect_create",
            method: "POST",
            path: "/cfg/accounts/oauth/disconnect/",
            issues: parsed.error.issues,
            data,
          },
        );
        if (typeof window !== "undefined") {
          try {
            window.dispatchEvent(
              new CustomEvent("zod-validation-error", {
                detail: {
                  operation: "cfg_accounts_oauth_disconnect_create",
                  method: "POST",
                  path: "/cfg/accounts/oauth/disconnect/",
                  issues: parsed.error.issues,
                  data,
                  timestamp: new Date(),
                },
                bubbles: true,
                cancelable: false,
              }),
            );
          } catch {
            // Event dispatch is best-effort.
          }
        }
        return data;
      }
      return parsed.data as unknown as Result;
    },
    config,
  );
}
