/*
 * 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 { Forbidden, Forbidden$inboundSchema } from "./forbidden.js";
import {
  NotAuthorizedForScope,
  NotAuthorizedForScope$inboundSchema,
} from "./notauthorizedforscope.js";
import { SDKValidationError } from "./sdkvalidationerror.js";

export type GetDomainTransferInRequest = {
  domain: string;
  teamId?: string | undefined;
};

/**
 * NotAuthorizedForScope
 */
export type GetDomainTransferInDomainsRegistrarResponseBody =
  | (NotAuthorizedForScope & { code: "not_authorized_for_scope" })
  | Forbidden;

export const GetDomainTransferInStatus = {
  Canceled: "canceled",
  CanceledPendingRefund: "canceled_pending_refund",
  Completed: "completed",
  Created: "created",
  Failed: "failed",
  Pending: "pending",
  PendingInsert: "pending_insert",
  PendingNewAuthCode: "pending_new_auth_code",
  PendingTransfer: "pending_transfer",
  PendingUnlock: "pending_unlock",
  PendingRegistryUnlock: "pending_registry_unlock",
  Rejected: "rejected",
  SubmittingTransfer: "submitting_transfer",
} as const;
export type GetDomainTransferInStatus = ClosedEnum<
  typeof GetDomainTransferInStatus
>;

/**
 * Success
 */
export type GetDomainTransferInResponseBody = {
  status: GetDomainTransferInStatus;
};

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

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

export function getDomainTransferInRequestToJSON(
  getDomainTransferInRequest: GetDomainTransferInRequest,
): string {
  return JSON.stringify(
    GetDomainTransferInRequest$outboundSchema.parse(getDomainTransferInRequest),
  );
}

/** @internal */
export const GetDomainTransferInDomainsRegistrarResponseBody$inboundSchema:
  z.ZodType<
    GetDomainTransferInDomainsRegistrarResponseBody,
    z.ZodTypeDef,
    unknown
  > = z.union([
    NotAuthorizedForScope$inboundSchema.and(
      z.object({ code: z.literal("not_authorized_for_scope") }),
    ),
    Forbidden$inboundSchema,
  ]);

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

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

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

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