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

import * as z from "zod/v4-mini";
import { remap as remap$ } from "../../lib/primitives.js";
import {
  SubscriptionProrationBehavior,
  SubscriptionProrationBehavior$outboundSchema,
} from "./subscriptionprorationbehavior.js";

export type SubscriptionUpdateSeats = {
  /**
   * Update the number of seats for this subscription.
   */
  seats: number;
  /**
   * Determine how to handle the proration billing. If not provided, will use the default organization setting.
   */
  prorationBehavior?: SubscriptionProrationBehavior | null | undefined;
};

/** @internal */
export type SubscriptionUpdateSeats$Outbound = {
  seats: number;
  proration_behavior?: string | null | undefined;
};

/** @internal */
export const SubscriptionUpdateSeats$outboundSchema: z.ZodMiniType<
  SubscriptionUpdateSeats$Outbound,
  SubscriptionUpdateSeats
> = z.pipe(
  z.object({
    seats: z.int(),
    prorationBehavior: z.optional(
      z.nullable(SubscriptionProrationBehavior$outboundSchema),
    ),
  }),
  z.transform((v) => {
    return remap$(v, {
      prorationBehavior: "proration_behavior",
    });
  }),
);

export function subscriptionUpdateSeatsToJSON(
  subscriptionUpdateSeats: SubscriptionUpdateSeats,
): string {
  return JSON.stringify(
    SubscriptionUpdateSeats$outboundSchema.parse(subscriptionUpdateSeats),
  );
}
