/*
 * 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 OrganizationCapabilities = {
  /**
   * Whether the organization can accept new checkout payments.
   */
  checkoutPayments: boolean;
  /**
   * Whether the organization can process subscription renewals.
   */
  subscriptionRenewals: boolean;
  /**
   * Whether the organization can withdraw its balance.
   */
  payouts: boolean;
  /**
   * Whether the organization can issue refunds.
   */
  refunds: boolean;
  /**
   * Whether the organization can access the API.
   */
  apiAccess: boolean;
  /**
   * Whether the organization can access the dashboard.
   */
  dashboardAccess: boolean;
};

/** @internal */
export const OrganizationCapabilities$inboundSchema: z.ZodMiniType<
  OrganizationCapabilities,
  unknown
> = z.pipe(
  z.object({
    checkout_payments: z.boolean(),
    subscription_renewals: z.boolean(),
    payouts: z.boolean(),
    refunds: z.boolean(),
    api_access: z.boolean(),
    dashboard_access: z.boolean(),
  }),
  z.transform((v) => {
    return remap$(v, {
      "checkout_payments": "checkoutPayments",
      "subscription_renewals": "subscriptionRenewals",
      "api_access": "apiAccess",
      "dashboard_access": "dashboardAccess",
    });
  }),
);
/** @internal */
export type OrganizationCapabilities$Outbound = {
  checkout_payments: boolean;
  subscription_renewals: boolean;
  payouts: boolean;
  refunds: boolean;
  api_access: boolean;
  dashboard_access: boolean;
};

/** @internal */
export const OrganizationCapabilities$outboundSchema: z.ZodMiniType<
  OrganizationCapabilities$Outbound,
  OrganizationCapabilities
> = z.pipe(
  z.object({
    checkoutPayments: z.boolean(),
    subscriptionRenewals: z.boolean(),
    payouts: z.boolean(),
    refunds: z.boolean(),
    apiAccess: z.boolean(),
    dashboardAccess: z.boolean(),
  }),
  z.transform((v) => {
    return remap$(v, {
      checkoutPayments: "checkout_payments",
      subscriptionRenewals: "subscription_renewals",
      apiAccess: "api_access",
      dashboardAccess: "dashboard_access",
    });
  }),
);

export function organizationCapabilitiesToJSON(
  organizationCapabilities: OrganizationCapabilities,
): string {
  return JSON.stringify(
    OrganizationCapabilities$outboundSchema.parse(organizationCapabilities),
  );
}
export function organizationCapabilitiesFromJSON(
  jsonString: string,
): SafeParseResult<OrganizationCapabilities, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => OrganizationCapabilities$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'OrganizationCapabilities' from JSON`,
  );
}
