import { Organization } from "../types/organization.types.js";
import { ResponseData } from "../utils/responseData.js";
import { PricingResult } from "../services/subscription.service.js";
import { FastifyReply, FastifyRequest } from "fastify";
import { Stripe } from "stripe";

//#region src/controllers/stripe.controller.d.ts
type GetPricingBody = {
  priceIds: string[];
  promoCode?: string;
};
type GetPricingResult = ResponseData<PricingResult>;
/**
 * Simulate pricing for a given set of prices and a promotion code.
 *
 * @param request - The request object containing the price IDs and promotion code.
 * @param reply - The response object to send the simulated pricing result.
 */
declare const getPricing: (request: FastifyRequest<{
  Body: GetPricingBody;
}>, reply: FastifyReply) => Promise<void>;
type GetCheckoutSessionBody = {
  priceId: string;
  promoCode?: string;
};
type GetCheckoutSessionResult = ResponseData<{
  subscription: Stripe.Response<Stripe.Subscription>;
  clientSecret: string;
}>;
/**
 * Handles subscription creation or update with Stripe and returns a ClientSecret.
 */
declare const getSubscription: (request: FastifyRequest<{
  Body: GetCheckoutSessionBody;
}>, reply: FastifyReply) => Promise<void>;
type CancelSubscriptionData = Organization['plan'];
type CancelSubscriptionResult = ResponseData<CancelSubscriptionData>;
/**
 * Cancels a subscription for an organization.
 */
declare const cancelSubscription: (_request: FastifyRequest, reply: FastifyReply) => Promise<void>;
//#endregion
export { CancelSubscriptionResult, GetCheckoutSessionBody, GetCheckoutSessionResult, GetPricingBody, GetPricingResult, cancelSubscription, getPricing, getSubscription };
//# sourceMappingURL=stripe.controller.d.ts.map