/*
 * 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 {
  PresentmentCurrency,
  PresentmentCurrency$outboundSchema,
} from "./presentmentcurrency.js";
import {
  ProductPriceSeatTiersInput,
  ProductPriceSeatTiersInput$Outbound,
  ProductPriceSeatTiersInput$outboundSchema,
} from "./productpriceseattiersinput.js";
import {
  TaxBehaviorOption,
  TaxBehaviorOption$outboundSchema,
} from "./taxbehavioroption.js";

/**
 * Schema to create a seat-based price with volume-based tiers.
 */
export type ProductPriceSeatBasedCreate = {
  amountType: "seat_based";
  priceCurrency?: PresentmentCurrency | undefined;
  /**
   * The tax behavior of the price. If not set, it will default to the organization's default tax behavior.
   */
  taxBehavior?: TaxBehaviorOption | null | undefined;
  /**
   * List of pricing tiers for seat-based pricing.
   *
   * @remarks
   *
   * The minimum and maximum seat limits are derived from the tiers:
   * - minimum_seats = first tier's min_seats
   * - maximum_seats = last tier's max_seats (None for unlimited)
   */
  seatTiers: ProductPriceSeatTiersInput;
};

/** @internal */
export type ProductPriceSeatBasedCreate$Outbound = {
  amount_type: "seat_based";
  price_currency?: string | undefined;
  tax_behavior?: string | null | undefined;
  seat_tiers: ProductPriceSeatTiersInput$Outbound;
};

/** @internal */
export const ProductPriceSeatBasedCreate$outboundSchema: z.ZodMiniType<
  ProductPriceSeatBasedCreate$Outbound,
  ProductPriceSeatBasedCreate
> = z.pipe(
  z.object({
    amountType: z.literal("seat_based"),
    priceCurrency: z.optional(PresentmentCurrency$outboundSchema),
    taxBehavior: z.optional(z.nullable(TaxBehaviorOption$outboundSchema)),
    seatTiers: ProductPriceSeatTiersInput$outboundSchema,
  }),
  z.transform((v) => {
    return remap$(v, {
      amountType: "amount_type",
      priceCurrency: "price_currency",
      taxBehavior: "tax_behavior",
      seatTiers: "seat_tiers",
    });
  }),
);

export function productPriceSeatBasedCreateToJSON(
  productPriceSeatBasedCreate: ProductPriceSeatBasedCreate,
): string {
  return JSON.stringify(
    ProductPriceSeatBasedCreate$outboundSchema.parse(
      productPriceSeatBasedCreate,
    ),
  );
}
