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

export type JoinTeamRequestBody = {
  /**
   * The invite code to join the team.
   */
  inviteCode?: string | undefined;
};

export type JoinTeamRequest = {
  teamId: string;
  requestBody: JoinTeamRequestBody;
};

/**
 * Successfully joined a team.
 */
export type JoinTeamResponseBody = {
  /**
   * The ID of the team the user joined.
   */
  teamId: string;
  /**
   * The slug of the team the user joined.
   */
  slug: string;
  /**
   * The name of the team the user joined.
   */
  name: string;
  /**
   * The origin of how the user joined.
   */
  from: string;
};

/** @internal */
export type JoinTeamRequestBody$Outbound = {
  inviteCode?: string | undefined;
};

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

export function joinTeamRequestBodyToJSON(
  joinTeamRequestBody: JoinTeamRequestBody,
): string {
  return JSON.stringify(
    JoinTeamRequestBody$outboundSchema.parse(joinTeamRequestBody),
  );
}

/** @internal */
export type JoinTeamRequest$Outbound = {
  teamId: string;
  RequestBody: JoinTeamRequestBody$Outbound;
};

/** @internal */
export const JoinTeamRequest$outboundSchema: z.ZodType<
  JoinTeamRequest$Outbound,
  z.ZodTypeDef,
  JoinTeamRequest
> = z.object({
  teamId: z.string(),
  requestBody: z.lazy(() => JoinTeamRequestBody$outboundSchema),
}).transform((v) => {
  return remap$(v, {
    requestBody: "RequestBody",
  });
});

export function joinTeamRequestToJSON(
  joinTeamRequest: JoinTeamRequest,
): string {
  return JSON.stringify(JoinTeamRequest$outboundSchema.parse(joinTeamRequest));
}

/** @internal */
export const JoinTeamResponseBody$inboundSchema: z.ZodType<
  JoinTeamResponseBody,
  z.ZodTypeDef,
  unknown
> = z.object({
  teamId: types.string(),
  slug: types.string(),
  name: types.string(),
  from: types.string(),
});

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