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

import * as z from "zod/v3";
import { safeParse } from "../lib/schemas.js";
import { ClosedEnum } from "../types/enums.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 StatusRequest = {
  /**
   * 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;
};

export const StatusResponseBodyStatus = {
  Disabled: "disabled",
  Enabled: "enabled",
  OverLimit: "over_limit",
  Paused: "paused",
} as const;
export type StatusResponseBodyStatus = ClosedEnum<
  typeof StatusResponseBodyStatus
>;

export type ResponseBody2 = {
  status: StatusResponseBodyStatus;
};

export type ResponseBody1 = {
  status: string;
};

export type StatusResponseBody = ResponseBody1 | ResponseBody2;

/** @internal */
export type StatusRequest$Outbound = {
  teamId?: string | undefined;
  slug?: string | undefined;
};

/** @internal */
export const StatusRequest$outboundSchema: z.ZodType<
  StatusRequest$Outbound,
  z.ZodTypeDef,
  StatusRequest
> = z.object({
  teamId: z.string().optional(),
  slug: z.string().optional(),
});

export function statusRequestToJSON(statusRequest: StatusRequest): string {
  return JSON.stringify(StatusRequest$outboundSchema.parse(statusRequest));
}

/** @internal */
export const StatusResponseBodyStatus$inboundSchema: z.ZodNativeEnum<
  typeof StatusResponseBodyStatus
> = z.nativeEnum(StatusResponseBodyStatus);

/** @internal */
export const ResponseBody2$inboundSchema: z.ZodType<
  ResponseBody2,
  z.ZodTypeDef,
  unknown
> = z.object({
  status: StatusResponseBodyStatus$inboundSchema,
});

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

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

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

/** @internal */
export const StatusResponseBody$inboundSchema: z.ZodType<
  StatusResponseBody,
  z.ZodTypeDef,
  unknown
> = smartUnion([
  z.lazy(() => ResponseBody1$inboundSchema),
  z.lazy(() => ResponseBody2$inboundSchema),
]);

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