/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

import * as z from "zod/v3";
import { remap as remap$ } from "../lib/primitives.js";
import { smartUnion } from "../types/smartUnion.js";

export type DeleteEdgeConfigTokensRequestBody2 = {
  tokens?: Array<string> | undefined;
  ids: Array<string>;
};

export type DeleteEdgeConfigTokensRequestBody1 = {
  tokens: Array<string>;
  ids?: Array<string> | undefined;
};

export type DeleteEdgeConfigTokensRequestBody =
  | DeleteEdgeConfigTokensRequestBody1
  | DeleteEdgeConfigTokensRequestBody2;

export type DeleteEdgeConfigTokensRequest = {
  edgeConfigId: string;
  /**
   * The Team identifier to perform the request on behalf of.
   */
  teamId?: string | undefined;
  /**
   * The Team slug to perform the request on behalf of.
   */
  slug?: string | undefined;
  requestBody?:
    | DeleteEdgeConfigTokensRequestBody1
    | DeleteEdgeConfigTokensRequestBody2
    | undefined;
};

/** @internal */
export type DeleteEdgeConfigTokensRequestBody2$Outbound = {
  tokens?: Array<string> | undefined;
  ids: Array<string>;
};

/** @internal */
export const DeleteEdgeConfigTokensRequestBody2$outboundSchema: z.ZodType<
  DeleteEdgeConfigTokensRequestBody2$Outbound,
  z.ZodTypeDef,
  DeleteEdgeConfigTokensRequestBody2
> = z.object({
  tokens: z.array(z.string()).optional(),
  ids: z.array(z.string()),
});

export function deleteEdgeConfigTokensRequestBody2ToJSON(
  deleteEdgeConfigTokensRequestBody2: DeleteEdgeConfigTokensRequestBody2,
): string {
  return JSON.stringify(
    DeleteEdgeConfigTokensRequestBody2$outboundSchema.parse(
      deleteEdgeConfigTokensRequestBody2,
    ),
  );
}

/** @internal */
export type DeleteEdgeConfigTokensRequestBody1$Outbound = {
  tokens: Array<string>;
  ids?: Array<string> | undefined;
};

/** @internal */
export const DeleteEdgeConfigTokensRequestBody1$outboundSchema: z.ZodType<
  DeleteEdgeConfigTokensRequestBody1$Outbound,
  z.ZodTypeDef,
  DeleteEdgeConfigTokensRequestBody1
> = z.object({
  tokens: z.array(z.string()),
  ids: z.array(z.string()).optional(),
});

export function deleteEdgeConfigTokensRequestBody1ToJSON(
  deleteEdgeConfigTokensRequestBody1: DeleteEdgeConfigTokensRequestBody1,
): string {
  return JSON.stringify(
    DeleteEdgeConfigTokensRequestBody1$outboundSchema.parse(
      deleteEdgeConfigTokensRequestBody1,
    ),
  );
}

/** @internal */
export type DeleteEdgeConfigTokensRequestBody$Outbound =
  | DeleteEdgeConfigTokensRequestBody1$Outbound
  | DeleteEdgeConfigTokensRequestBody2$Outbound;

/** @internal */
export const DeleteEdgeConfigTokensRequestBody$outboundSchema: z.ZodType<
  DeleteEdgeConfigTokensRequestBody$Outbound,
  z.ZodTypeDef,
  DeleteEdgeConfigTokensRequestBody
> = smartUnion([
  z.lazy(() => DeleteEdgeConfigTokensRequestBody1$outboundSchema),
  z.lazy(() => DeleteEdgeConfigTokensRequestBody2$outboundSchema),
]);

export function deleteEdgeConfigTokensRequestBodyToJSON(
  deleteEdgeConfigTokensRequestBody: DeleteEdgeConfigTokensRequestBody,
): string {
  return JSON.stringify(
    DeleteEdgeConfigTokensRequestBody$outboundSchema.parse(
      deleteEdgeConfigTokensRequestBody,
    ),
  );
}

/** @internal */
export type DeleteEdgeConfigTokensRequest$Outbound = {
  edgeConfigId: string;
  teamId?: string | undefined;
  slug?: string | undefined;
  RequestBody?:
    | DeleteEdgeConfigTokensRequestBody1$Outbound
    | DeleteEdgeConfigTokensRequestBody2$Outbound
    | undefined;
};

/** @internal */
export const DeleteEdgeConfigTokensRequest$outboundSchema: z.ZodType<
  DeleteEdgeConfigTokensRequest$Outbound,
  z.ZodTypeDef,
  DeleteEdgeConfigTokensRequest
> = z.object({
  edgeConfigId: z.string(),
  teamId: z.string().optional(),
  slug: z.string().optional(),
  requestBody: smartUnion([
    z.lazy(() => DeleteEdgeConfigTokensRequestBody1$outboundSchema),
    z.lazy(() => DeleteEdgeConfigTokensRequestBody2$outboundSchema),
  ]).optional(),
}).transform((v) => {
  return remap$(v, {
    requestBody: "RequestBody",
  });
});

export function deleteEdgeConfigTokensRequestToJSON(
  deleteEdgeConfigTokensRequest: DeleteEdgeConfigTokensRequest,
): string {
  return JSON.stringify(
    DeleteEdgeConfigTokensRequest$outboundSchema.parse(
      deleteEdgeConfigTokensRequest,
    ),
  );
}
