/*
 * 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 { SDKValidationError } from "../errors/sdkvalidationerror.js";

export type AiConfigsMaintainerTeam = {
  /**
   * The team key
   */
  key: string;
  /**
   * The team name
   */
  name: string;
  kind: string;
};

export type MaintainerMember = {
  /**
   * The member ID
   */
  id: string;
  /**
   * The member email address
   */
  email: string;
  /**
   * The member first name
   */
  firstName?: string | undefined;
  /**
   * The member last name
   */
  lastName?: string | undefined;
  /**
   * The member role
   */
  role: string;
  kind: string;
};

/**
 * The member or team that maintains this resource
 */
export type AIConfigMaintainer = MaintainerMember | AiConfigsMaintainerTeam;

/** @internal */
export const AiConfigsMaintainerTeam$inboundSchema: z.ZodType<
  AiConfigsMaintainerTeam,
  z.ZodTypeDef,
  unknown
> = z.object({
  key: z.string(),
  name: z.string(),
  kind: z.string(),
});
/** @internal */
export type AiConfigsMaintainerTeam$Outbound = {
  key: string;
  name: string;
  kind: string;
};

/** @internal */
export const AiConfigsMaintainerTeam$outboundSchema: z.ZodType<
  AiConfigsMaintainerTeam$Outbound,
  z.ZodTypeDef,
  AiConfigsMaintainerTeam
> = z.object({
  key: z.string(),
  name: z.string(),
  kind: z.string(),
});

export function aiConfigsMaintainerTeamToJSON(
  aiConfigsMaintainerTeam: AiConfigsMaintainerTeam,
): string {
  return JSON.stringify(
    AiConfigsMaintainerTeam$outboundSchema.parse(aiConfigsMaintainerTeam),
  );
}
export function aiConfigsMaintainerTeamFromJSON(
  jsonString: string,
): SafeParseResult<AiConfigsMaintainerTeam, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => AiConfigsMaintainerTeam$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'AiConfigsMaintainerTeam' from JSON`,
  );
}

/** @internal */
export const MaintainerMember$inboundSchema: z.ZodType<
  MaintainerMember,
  z.ZodTypeDef,
  unknown
> = z.object({
  _id: z.string(),
  email: z.string(),
  firstName: z.string().optional(),
  lastName: z.string().optional(),
  role: z.string(),
  kind: z.string(),
}).transform((v) => {
  return remap$(v, {
    "_id": "id",
  });
});
/** @internal */
export type MaintainerMember$Outbound = {
  _id: string;
  email: string;
  firstName?: string | undefined;
  lastName?: string | undefined;
  role: string;
  kind: string;
};

/** @internal */
export const MaintainerMember$outboundSchema: z.ZodType<
  MaintainerMember$Outbound,
  z.ZodTypeDef,
  MaintainerMember
> = z.object({
  id: z.string(),
  email: z.string(),
  firstName: z.string().optional(),
  lastName: z.string().optional(),
  role: z.string(),
  kind: z.string(),
}).transform((v) => {
  return remap$(v, {
    id: "_id",
  });
});

export function maintainerMemberToJSON(
  maintainerMember: MaintainerMember,
): string {
  return JSON.stringify(
    MaintainerMember$outboundSchema.parse(maintainerMember),
  );
}
export function maintainerMemberFromJSON(
  jsonString: string,
): SafeParseResult<MaintainerMember, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => MaintainerMember$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'MaintainerMember' from JSON`,
  );
}

/** @internal */
export const AIConfigMaintainer$inboundSchema: z.ZodType<
  AIConfigMaintainer,
  z.ZodTypeDef,
  unknown
> = z.union([
  z.lazy(() => MaintainerMember$inboundSchema),
  z.lazy(() => AiConfigsMaintainerTeam$inboundSchema),
]);
/** @internal */
export type AIConfigMaintainer$Outbound =
  | MaintainerMember$Outbound
  | AiConfigsMaintainerTeam$Outbound;

/** @internal */
export const AIConfigMaintainer$outboundSchema: z.ZodType<
  AIConfigMaintainer$Outbound,
  z.ZodTypeDef,
  AIConfigMaintainer
> = z.union([
  z.lazy(() => MaintainerMember$outboundSchema),
  z.lazy(() => AiConfigsMaintainerTeam$outboundSchema),
]);

export function aiConfigMaintainerToJSON(
  aiConfigMaintainer: AIConfigMaintainer,
): string {
  return JSON.stringify(
    AIConfigMaintainer$outboundSchema.parse(aiConfigMaintainer),
  );
}
export function aiConfigMaintainerFromJSON(
  jsonString: string,
): SafeParseResult<AIConfigMaintainer, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => AIConfigMaintainer$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'AIConfigMaintainer' from JSON`,
  );
}
