/*
 * 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 { safeParse } from "../lib/schemas.js";
import { Result as SafeParseResult } from "../types/fp.js";
import * as types from "../types/primitives.js";
import { smartUnion } from "../types/smartUnion.js";
import { SDKValidationError } from "./sdkvalidationerror.js";

export type RemoveBypassIpRequestBody2 = {
  domain?: string | undefined;
  projectScope: boolean;
  sourceIp?: string | undefined;
  allSources?: boolean | undefined;
  note?: string | undefined;
};

export type RemoveBypassIpRequestBody1 = {
  domain: string;
  projectScope?: boolean | undefined;
  sourceIp?: string | undefined;
  allSources?: boolean | undefined;
  note?: string | undefined;
};

export type RemoveBypassIpRequestBody =
  | RemoveBypassIpRequestBody1
  | RemoveBypassIpRequestBody2;

export type RemoveBypassIpRequest = {
  projectId: 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?:
    | RemoveBypassIpRequestBody1
    | RemoveBypassIpRequestBody2
    | undefined;
};

export type RemoveBypassIpResponseBody = {
  ok: boolean;
};

/** @internal */
export type RemoveBypassIpRequestBody2$Outbound = {
  domain?: string | undefined;
  projectScope: boolean;
  sourceIp?: string | undefined;
  allSources?: boolean | undefined;
  note?: string | undefined;
};

/** @internal */
export const RemoveBypassIpRequestBody2$outboundSchema: z.ZodType<
  RemoveBypassIpRequestBody2$Outbound,
  z.ZodTypeDef,
  RemoveBypassIpRequestBody2
> = z.object({
  domain: z.string().optional(),
  projectScope: z.boolean(),
  sourceIp: z.string().optional(),
  allSources: z.boolean().optional(),
  note: z.string().optional(),
});

export function removeBypassIpRequestBody2ToJSON(
  removeBypassIpRequestBody2: RemoveBypassIpRequestBody2,
): string {
  return JSON.stringify(
    RemoveBypassIpRequestBody2$outboundSchema.parse(removeBypassIpRequestBody2),
  );
}

/** @internal */
export type RemoveBypassIpRequestBody1$Outbound = {
  domain: string;
  projectScope?: boolean | undefined;
  sourceIp?: string | undefined;
  allSources?: boolean | undefined;
  note?: string | undefined;
};

/** @internal */
export const RemoveBypassIpRequestBody1$outboundSchema: z.ZodType<
  RemoveBypassIpRequestBody1$Outbound,
  z.ZodTypeDef,
  RemoveBypassIpRequestBody1
> = z.object({
  domain: z.string(),
  projectScope: z.boolean().optional(),
  sourceIp: z.string().optional(),
  allSources: z.boolean().optional(),
  note: z.string().optional(),
});

export function removeBypassIpRequestBody1ToJSON(
  removeBypassIpRequestBody1: RemoveBypassIpRequestBody1,
): string {
  return JSON.stringify(
    RemoveBypassIpRequestBody1$outboundSchema.parse(removeBypassIpRequestBody1),
  );
}

/** @internal */
export type RemoveBypassIpRequestBody$Outbound =
  | RemoveBypassIpRequestBody1$Outbound
  | RemoveBypassIpRequestBody2$Outbound;

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

export function removeBypassIpRequestBodyToJSON(
  removeBypassIpRequestBody: RemoveBypassIpRequestBody,
): string {
  return JSON.stringify(
    RemoveBypassIpRequestBody$outboundSchema.parse(removeBypassIpRequestBody),
  );
}

/** @internal */
export type RemoveBypassIpRequest$Outbound = {
  projectId: string;
  teamId?: string | undefined;
  slug?: string | undefined;
  RequestBody?:
    | RemoveBypassIpRequestBody1$Outbound
    | RemoveBypassIpRequestBody2$Outbound
    | undefined;
};

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

export function removeBypassIpRequestToJSON(
  removeBypassIpRequest: RemoveBypassIpRequest,
): string {
  return JSON.stringify(
    RemoveBypassIpRequest$outboundSchema.parse(removeBypassIpRequest),
  );
}

/** @internal */
export const RemoveBypassIpResponseBody$inboundSchema: z.ZodType<
  RemoveBypassIpResponseBody,
  z.ZodTypeDef,
  unknown
> = z.object({
  ok: types.boolean(),
});

export function removeBypassIpResponseBodyFromJSON(
  jsonString: string,
): SafeParseResult<RemoveBypassIpResponseBody, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => RemoveBypassIpResponseBody$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'RemoveBypassIpResponseBody' from JSON`,
  );
}
