/*
 * 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 { 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 DeleteSharedEnvVariableRequestBody = {
  /**
   * IDs of the Shared Environment Variables to delete
   */
  ids: Array<string>;
};

export type DeleteSharedEnvVariableRequest = {
  /**
   * 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;
  requestBody?: DeleteSharedEnvVariableRequestBody | undefined;
};

export const DeleteSharedEnvVariableValue2 = {
  Development: "development",
  Preview: "preview",
  Production: "production",
} as const;
export type DeleteSharedEnvVariableValue2 = ClosedEnum<
  typeof DeleteSharedEnvVariableValue2
>;

export type DeleteSharedEnvVariableValue =
  | string
  | Array<DeleteSharedEnvVariableValue2>;

export const DeleteSharedEnvVariableTarget2 = {
  Development: "development",
  Preview: "preview",
  Production: "production",
} as const;
export type DeleteSharedEnvVariableTarget2 = ClosedEnum<
  typeof DeleteSharedEnvVariableTarget2
>;

export const DeleteSharedEnvVariableTarget1 = {
  Development: "development",
  Preview: "preview",
  Production: "production",
} as const;
export type DeleteSharedEnvVariableTarget1 = ClosedEnum<
  typeof DeleteSharedEnvVariableTarget1
>;

export type DeleteSharedEnvVariableTarget =
  | Array<DeleteSharedEnvVariableTarget1>
  | DeleteSharedEnvVariableTarget2;

export type DeleteSharedEnvVariableError = {
  code: string;
  message: string;
  key?: string | undefined;
  envVarId?: string | undefined;
  envVarKey?: string | undefined;
  action?: string | undefined;
  link?: string | undefined;
  value?: string | Array<DeleteSharedEnvVariableValue2> | undefined;
  gitBranch?: string | undefined;
  target?:
    | Array<DeleteSharedEnvVariableTarget1>
    | DeleteSharedEnvVariableTarget2
    | undefined;
  project?: string | undefined;
};

export type DeleteSharedEnvVariableFailed = {
  error: DeleteSharedEnvVariableError;
};

export type DeleteSharedEnvVariableResponseBody = {
  deleted: Array<string>;
  failed: Array<DeleteSharedEnvVariableFailed>;
};

/** @internal */
export type DeleteSharedEnvVariableRequestBody$Outbound = {
  ids: Array<string>;
};

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

export function deleteSharedEnvVariableRequestBodyToJSON(
  deleteSharedEnvVariableRequestBody: DeleteSharedEnvVariableRequestBody,
): string {
  return JSON.stringify(
    DeleteSharedEnvVariableRequestBody$outboundSchema.parse(
      deleteSharedEnvVariableRequestBody,
    ),
  );
}

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

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

export function deleteSharedEnvVariableRequestToJSON(
  deleteSharedEnvVariableRequest: DeleteSharedEnvVariableRequest,
): string {
  return JSON.stringify(
    DeleteSharedEnvVariableRequest$outboundSchema.parse(
      deleteSharedEnvVariableRequest,
    ),
  );
}

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

/** @internal */
export const DeleteSharedEnvVariableValue$inboundSchema: z.ZodType<
  DeleteSharedEnvVariableValue,
  z.ZodTypeDef,
  unknown
> = smartUnion([
  types.string(),
  z.array(DeleteSharedEnvVariableValue2$inboundSchema),
]);

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

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

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

/** @internal */
export const DeleteSharedEnvVariableTarget$inboundSchema: z.ZodType<
  DeleteSharedEnvVariableTarget,
  z.ZodTypeDef,
  unknown
> = smartUnion([
  z.array(DeleteSharedEnvVariableTarget1$inboundSchema),
  DeleteSharedEnvVariableTarget2$inboundSchema,
]);

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

/** @internal */
export const DeleteSharedEnvVariableError$inboundSchema: z.ZodType<
  DeleteSharedEnvVariableError,
  z.ZodTypeDef,
  unknown
> = z.object({
  code: types.string(),
  message: types.string(),
  key: types.optional(types.string()),
  envVarId: types.optional(types.string()),
  envVarKey: types.optional(types.string()),
  action: types.optional(types.string()),
  link: types.optional(types.string()),
  value: types.optional(
    smartUnion([
      types.string(),
      z.array(DeleteSharedEnvVariableValue2$inboundSchema),
    ]),
  ),
  gitBranch: types.optional(types.string()),
  target: types.optional(
    smartUnion([
      z.array(DeleteSharedEnvVariableTarget1$inboundSchema),
      DeleteSharedEnvVariableTarget2$inboundSchema,
    ]),
  ),
  project: types.optional(types.string()),
});

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

/** @internal */
export const DeleteSharedEnvVariableFailed$inboundSchema: z.ZodType<
  DeleteSharedEnvVariableFailed,
  z.ZodTypeDef,
  unknown
> = z.object({
  error: z.lazy(() => DeleteSharedEnvVariableError$inboundSchema),
});

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

/** @internal */
export const DeleteSharedEnvVariableResponseBody$inboundSchema: z.ZodType<
  DeleteSharedEnvVariableResponseBody,
  z.ZodTypeDef,
  unknown
> = z.object({
  deleted: z.array(types.string()),
  failed: z.array(z.lazy(() => DeleteSharedEnvVariableFailed$inboundSchema)),
});

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