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

import * as z from "zod/v3";
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 {
  BoughtTooRecently,
  BoughtTooRecently$inboundSchema,
} from "./boughttoorecently.js";
import {
  DomainNotRegistered,
  DomainNotRegistered$inboundSchema,
} from "./domainnotregistered.js";
import { Forbidden, Forbidden$inboundSchema } from "./forbidden.js";
import {
  HttpApiDecodeError,
  HttpApiDecodeError$inboundSchema,
} from "./httpapidecodeerror.js";
import {
  NotAuthorizedForScope,
  NotAuthorizedForScope$inboundSchema,
} from "./notauthorizedforscope.js";
import { SDKValidationError } from "./sdkvalidationerror.js";

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

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

/**
 * There was something wrong with the request
 */
export type GetDomainContactVerificationDomainsRegistrarResponseBody =
  | BoughtTooRecently
  | DomainNotRegistered
  | HttpApiDecodeError;

export type GetDomainContactVerificationResponseBody2 = {
  verified: false;
  /**
   * a string to be decoded into a Date
   */
  verifyBy: string;
  email: string;
};

export type GetDomainContactVerificationResponseBody1 = {
  verified: true;
};

/**
 * Success
 */
export type GetDomainContactVerificationResponseBody =
  | GetDomainContactVerificationResponseBody2
  | GetDomainContactVerificationResponseBody1;

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

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

export function getDomainContactVerificationRequestToJSON(
  getDomainContactVerificationRequest: GetDomainContactVerificationRequest,
): string {
  return JSON.stringify(
    GetDomainContactVerificationRequest$outboundSchema.parse(
      getDomainContactVerificationRequest,
    ),
  );
}

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

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

/** @internal */
export const GetDomainContactVerificationDomainsRegistrarResponseBody$inboundSchema:
  z.ZodType<
    GetDomainContactVerificationDomainsRegistrarResponseBody,
    z.ZodTypeDef,
    unknown
  > = smartUnion([
    BoughtTooRecently$inboundSchema,
    DomainNotRegistered$inboundSchema,
    HttpApiDecodeError$inboundSchema,
  ]);

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

/** @internal */
export const GetDomainContactVerificationResponseBody2$inboundSchema: z.ZodType<
  GetDomainContactVerificationResponseBody2,
  z.ZodTypeDef,
  unknown
> = z.object({
  verified: types.literal(false),
  verifyBy: types.string(),
  email: types.string(),
});

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

/** @internal */
export const GetDomainContactVerificationResponseBody1$inboundSchema: z.ZodType<
  GetDomainContactVerificationResponseBody1,
  z.ZodTypeDef,
  unknown
> = z.object({
  verified: types.literal(true),
});

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

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

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