/*
 * 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 { ClosedEnum } from "../types/enums.js";

export const UpdateIntegrationDeploymentActionStatus = {
  Running: "running",
  Succeeded: "succeeded",
  Failed: "failed",
} as const;
export type UpdateIntegrationDeploymentActionStatus = ClosedEnum<
  typeof UpdateIntegrationDeploymentActionStatus
>;

export type Secrets = {
  name: string;
  value: string;
};

export type Outcomes1 = {
  kind: string;
  secrets: Array<Secrets>;
};

export type Outcomes = Outcomes1;

export type UpdateIntegrationDeploymentActionRequestBody = {
  status?: UpdateIntegrationDeploymentActionStatus | undefined;
  statusText?: string | undefined;
  statusUrl?: string | undefined;
  outcomes?: Array<Outcomes1> | undefined;
};

export type UpdateIntegrationDeploymentActionRequest = {
  deploymentId: string;
  integrationConfigurationId: string;
  resourceId: string;
  action: string;
  requestBody?: UpdateIntegrationDeploymentActionRequestBody | undefined;
};

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

/** @internal */
export type Secrets$Outbound = {
  name: string;
  value: string;
};

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

export function secretsToJSON(secrets: Secrets): string {
  return JSON.stringify(Secrets$outboundSchema.parse(secrets));
}

/** @internal */
export type Outcomes1$Outbound = {
  kind: string;
  secrets: Array<Secrets$Outbound>;
};

/** @internal */
export const Outcomes1$outboundSchema: z.ZodType<
  Outcomes1$Outbound,
  z.ZodTypeDef,
  Outcomes1
> = z.object({
  kind: z.string(),
  secrets: z.array(z.lazy(() => Secrets$outboundSchema)),
});

export function outcomes1ToJSON(outcomes1: Outcomes1): string {
  return JSON.stringify(Outcomes1$outboundSchema.parse(outcomes1));
}

/** @internal */
export type Outcomes$Outbound = Outcomes1$Outbound;

/** @internal */
export const Outcomes$outboundSchema: z.ZodType<
  Outcomes$Outbound,
  z.ZodTypeDef,
  Outcomes
> = z.lazy(() => Outcomes1$outboundSchema);

export function outcomesToJSON(outcomes: Outcomes): string {
  return JSON.stringify(Outcomes$outboundSchema.parse(outcomes));
}

/** @internal */
export type UpdateIntegrationDeploymentActionRequestBody$Outbound = {
  status?: string | undefined;
  statusText?: string | undefined;
  statusUrl?: string | undefined;
  outcomes?: Array<Outcomes1$Outbound> | undefined;
};

/** @internal */
export const UpdateIntegrationDeploymentActionRequestBody$outboundSchema:
  z.ZodType<
    UpdateIntegrationDeploymentActionRequestBody$Outbound,
    z.ZodTypeDef,
    UpdateIntegrationDeploymentActionRequestBody
  > = z.object({
    status: UpdateIntegrationDeploymentActionStatus$outboundSchema.optional(),
    statusText: z.string().optional(),
    statusUrl: z.string().optional(),
    outcomes: z.array(z.lazy(() => Outcomes1$outboundSchema)).optional(),
  });

export function updateIntegrationDeploymentActionRequestBodyToJSON(
  updateIntegrationDeploymentActionRequestBody:
    UpdateIntegrationDeploymentActionRequestBody,
): string {
  return JSON.stringify(
    UpdateIntegrationDeploymentActionRequestBody$outboundSchema.parse(
      updateIntegrationDeploymentActionRequestBody,
    ),
  );
}

/** @internal */
export type UpdateIntegrationDeploymentActionRequest$Outbound = {
  deploymentId: string;
  integrationConfigurationId: string;
  resourceId: string;
  action: string;
  RequestBody?:
    | UpdateIntegrationDeploymentActionRequestBody$Outbound
    | undefined;
};

/** @internal */
export const UpdateIntegrationDeploymentActionRequest$outboundSchema: z.ZodType<
  UpdateIntegrationDeploymentActionRequest$Outbound,
  z.ZodTypeDef,
  UpdateIntegrationDeploymentActionRequest
> = z.object({
  deploymentId: z.string(),
  integrationConfigurationId: z.string(),
  resourceId: z.string(),
  action: z.string(),
  requestBody: z.lazy(() =>
    UpdateIntegrationDeploymentActionRequestBody$outboundSchema
  ).optional(),
}).transform((v) => {
  return remap$(v, {
    requestBody: "RequestBody",
  });
});

export function updateIntegrationDeploymentActionRequestToJSON(
  updateIntegrationDeploymentActionRequest:
    UpdateIntegrationDeploymentActionRequest,
): string {
  return JSON.stringify(
    UpdateIntegrationDeploymentActionRequest$outboundSchema.parse(
      updateIntegrationDeploymentActionRequest,
    ),
  );
}
