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

import * as z from "zod/v3";
import { remap as remap$ } from "../lib/primitives.js";

/**
 * A map of environments to override values for the secret, used for setting different values across deployments in production, preview, and development environments. Note: the same value will be used for all deployments in the given environment.
 */
export type UpdateResourceSecretsEnvironmentOverrides = {
  /**
   * Value used for development environment.
   */
  development?: string | undefined;
  /**
   * Value used for preview environment.
   */
  preview?: string | undefined;
  /**
   * Value used for production environment.
   */
  production?: string | undefined;
};

export type UpdateResourceSecretsSecrets = {
  name: string;
  value: string;
  prefix?: string | undefined;
  /**
   * A map of environments to override values for the secret, used for setting different values across deployments in production, preview, and development environments. Note: the same value will be used for all deployments in the given environment.
   */
  environmentOverrides?: UpdateResourceSecretsEnvironmentOverrides | undefined;
};

export type UpdateResourceSecretsRequestBody = {
  secrets: Array<UpdateResourceSecretsSecrets>;
  /**
   * If true, will only update the provided secrets
   */
  partial?: boolean | undefined;
};

export type UpdateResourceSecretsRequest = {
  integrationConfigurationId: string;
  integrationProductIdOrSlug: string;
  resourceId: string;
  requestBody: UpdateResourceSecretsRequestBody;
};

/** @internal */
export type UpdateResourceSecretsEnvironmentOverrides$Outbound = {
  development?: string | undefined;
  preview?: string | undefined;
  production?: string | undefined;
};

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

export function updateResourceSecretsEnvironmentOverridesToJSON(
  updateResourceSecretsEnvironmentOverrides:
    UpdateResourceSecretsEnvironmentOverrides,
): string {
  return JSON.stringify(
    UpdateResourceSecretsEnvironmentOverrides$outboundSchema.parse(
      updateResourceSecretsEnvironmentOverrides,
    ),
  );
}

/** @internal */
export type UpdateResourceSecretsSecrets$Outbound = {
  name: string;
  value: string;
  prefix?: string | undefined;
  environmentOverrides?:
    | UpdateResourceSecretsEnvironmentOverrides$Outbound
    | undefined;
};

/** @internal */
export const UpdateResourceSecretsSecrets$outboundSchema: z.ZodType<
  UpdateResourceSecretsSecrets$Outbound,
  z.ZodTypeDef,
  UpdateResourceSecretsSecrets
> = z.object({
  name: z.string(),
  value: z.string(),
  prefix: z.string().optional(),
  environmentOverrides: z.lazy(() =>
    UpdateResourceSecretsEnvironmentOverrides$outboundSchema
  ).optional(),
});

export function updateResourceSecretsSecretsToJSON(
  updateResourceSecretsSecrets: UpdateResourceSecretsSecrets,
): string {
  return JSON.stringify(
    UpdateResourceSecretsSecrets$outboundSchema.parse(
      updateResourceSecretsSecrets,
    ),
  );
}

/** @internal */
export type UpdateResourceSecretsRequestBody$Outbound = {
  secrets: Array<UpdateResourceSecretsSecrets$Outbound>;
  partial?: boolean | undefined;
};

/** @internal */
export const UpdateResourceSecretsRequestBody$outboundSchema: z.ZodType<
  UpdateResourceSecretsRequestBody$Outbound,
  z.ZodTypeDef,
  UpdateResourceSecretsRequestBody
> = z.object({
  secrets: z.array(z.lazy(() => UpdateResourceSecretsSecrets$outboundSchema)),
  partial: z.boolean().optional(),
});

export function updateResourceSecretsRequestBodyToJSON(
  updateResourceSecretsRequestBody: UpdateResourceSecretsRequestBody,
): string {
  return JSON.stringify(
    UpdateResourceSecretsRequestBody$outboundSchema.parse(
      updateResourceSecretsRequestBody,
    ),
  );
}

/** @internal */
export type UpdateResourceSecretsRequest$Outbound = {
  integrationConfigurationId: string;
  integrationProductIdOrSlug: string;
  resourceId: string;
  RequestBody: UpdateResourceSecretsRequestBody$Outbound;
};

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

export function updateResourceSecretsRequestToJSON(
  updateResourceSecretsRequest: UpdateResourceSecretsRequest,
): string {
  return JSON.stringify(
    UpdateResourceSecretsRequest$outboundSchema.parse(
      updateResourceSecretsRequest,
    ),
  );
}
