/*
 * 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 { safeParse } from "../../lib/schemas.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";

export type OrganizationCustomerEmailSettings = {
  orderConfirmation: boolean;
  subscriptionCancellation: boolean;
  subscriptionConfirmation: boolean;
  subscriptionCycled: boolean;
  subscriptionCycledAfterTrial: boolean;
  subscriptionPastDue: boolean;
  subscriptionPaused: boolean;
  subscriptionResumed: boolean;
  subscriptionRenewalReminder: boolean;
  subscriptionRevoked: boolean;
  subscriptionTrialConversionReminder: boolean;
  subscriptionUncanceled: boolean;
  subscriptionUpdated: boolean;
};

/** @internal */
export const OrganizationCustomerEmailSettings$inboundSchema: z.ZodMiniType<
  OrganizationCustomerEmailSettings,
  unknown
> = z.pipe(
  z.object({
    order_confirmation: z.boolean(),
    subscription_cancellation: z.boolean(),
    subscription_confirmation: z.boolean(),
    subscription_cycled: z.boolean(),
    subscription_cycled_after_trial: z.boolean(),
    subscription_past_due: z.boolean(),
    subscription_paused: z.boolean(),
    subscription_resumed: z.boolean(),
    subscription_renewal_reminder: z.boolean(),
    subscription_revoked: z.boolean(),
    subscription_trial_conversion_reminder: z.boolean(),
    subscription_uncanceled: z.boolean(),
    subscription_updated: z.boolean(),
  }),
  z.transform((v) => {
    return remap$(v, {
      "order_confirmation": "orderConfirmation",
      "subscription_cancellation": "subscriptionCancellation",
      "subscription_confirmation": "subscriptionConfirmation",
      "subscription_cycled": "subscriptionCycled",
      "subscription_cycled_after_trial": "subscriptionCycledAfterTrial",
      "subscription_past_due": "subscriptionPastDue",
      "subscription_paused": "subscriptionPaused",
      "subscription_resumed": "subscriptionResumed",
      "subscription_renewal_reminder": "subscriptionRenewalReminder",
      "subscription_revoked": "subscriptionRevoked",
      "subscription_trial_conversion_reminder":
        "subscriptionTrialConversionReminder",
      "subscription_uncanceled": "subscriptionUncanceled",
      "subscription_updated": "subscriptionUpdated",
    });
  }),
);
/** @internal */
export type OrganizationCustomerEmailSettings$Outbound = {
  order_confirmation: boolean;
  subscription_cancellation: boolean;
  subscription_confirmation: boolean;
  subscription_cycled: boolean;
  subscription_cycled_after_trial: boolean;
  subscription_past_due: boolean;
  subscription_paused: boolean;
  subscription_resumed: boolean;
  subscription_renewal_reminder: boolean;
  subscription_revoked: boolean;
  subscription_trial_conversion_reminder: boolean;
  subscription_uncanceled: boolean;
  subscription_updated: boolean;
};

/** @internal */
export const OrganizationCustomerEmailSettings$outboundSchema: z.ZodMiniType<
  OrganizationCustomerEmailSettings$Outbound,
  OrganizationCustomerEmailSettings
> = z.pipe(
  z.object({
    orderConfirmation: z.boolean(),
    subscriptionCancellation: z.boolean(),
    subscriptionConfirmation: z.boolean(),
    subscriptionCycled: z.boolean(),
    subscriptionCycledAfterTrial: z.boolean(),
    subscriptionPastDue: z.boolean(),
    subscriptionPaused: z.boolean(),
    subscriptionResumed: z.boolean(),
    subscriptionRenewalReminder: z.boolean(),
    subscriptionRevoked: z.boolean(),
    subscriptionTrialConversionReminder: z.boolean(),
    subscriptionUncanceled: z.boolean(),
    subscriptionUpdated: z.boolean(),
  }),
  z.transform((v) => {
    return remap$(v, {
      orderConfirmation: "order_confirmation",
      subscriptionCancellation: "subscription_cancellation",
      subscriptionConfirmation: "subscription_confirmation",
      subscriptionCycled: "subscription_cycled",
      subscriptionCycledAfterTrial: "subscription_cycled_after_trial",
      subscriptionPastDue: "subscription_past_due",
      subscriptionPaused: "subscription_paused",
      subscriptionResumed: "subscription_resumed",
      subscriptionRenewalReminder: "subscription_renewal_reminder",
      subscriptionRevoked: "subscription_revoked",
      subscriptionTrialConversionReminder:
        "subscription_trial_conversion_reminder",
      subscriptionUncanceled: "subscription_uncanceled",
      subscriptionUpdated: "subscription_updated",
    });
  }),
);

export function organizationCustomerEmailSettingsToJSON(
  organizationCustomerEmailSettings: OrganizationCustomerEmailSettings,
): string {
  return JSON.stringify(
    OrganizationCustomerEmailSettings$outboundSchema.parse(
      organizationCustomerEmailSettings,
    ),
  );
}
export function organizationCustomerEmailSettingsFromJSON(
  jsonString: string,
): SafeParseResult<OrganizationCustomerEmailSettings, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => OrganizationCustomerEmailSettings$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'OrganizationCustomerEmailSettings' from JSON`,
  );
}
