import { Organization } from "../types/organization.types.js";
import { ResponseWithSession } from "../middlewares/sessionAuth.middleware.js";
import { ResponseData } from "../utils/responseData.js";
import { PricingResult } from "../services/subscription.service.js";
import { Request } from "express";
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 req - The request object containing the price IDs and promotion code.
 * @param res - The response object to send the simulated pricing result.
 */
declare const getPricing: (req: Request<undefined, undefined, GetPricingBody>, res: ResponseWithSession<GetPricingResult>) => 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.
 * @param req - Express request object.
 * @param res - Express response object.
 */
declare const getSubscription: (req: Request<undefined, undefined, GetCheckoutSessionBody>, res: ResponseWithSession<GetCheckoutSessionResult>) => Promise<void>;
type CancelSubscriptionData = Organization['plan'];
type CancelSubscriptionResult = ResponseData<CancelSubscriptionData>;
/**
 * Cancels a subscription for an organization.
 * @param _req - Express request object.
 * @param res - Express response object.
 */
declare const cancelSubscription: (_req: Request, res: ResponseWithSession<CancelSubscriptionResult>) => Promise<void>;
//#endregion
export { GetCheckoutSessionBody, GetCheckoutSessionResult, GetPricingBody, GetPricingResult, cancelSubscription, getPricing, getSubscription };
//# sourceMappingURL=stripe.controller.d.ts.map