import { RawBodyRequest } from '@nestjs/common';
import { Request } from 'express';
import { BillingService } from './billing.service';
import { PaystackService } from './paystack.service';
import { User } from '../users/entities/user.entity';
export declare class BillingController {
    private readonly billingService;
    private readonly paystackService;
    constructor(billingService: BillingService, paystackService: PaystackService);
    getPlans(): Promise<import("./entities/plan.entity").Plan[]>;
    getSubscription(user: User): Promise<import("./entities/subscription.entity").Subscription>;
    getSubscriptionHistory(user: User): Promise<import("./entities/subscription.entity").Subscription[]>;
    getUsage(user: User): Promise<{
        plan: import("../organizations/entities/organization.entity").OrganizationPlan;
        plan_expires_at: Date;
        limits: {
            max_campaigns: number;
            max_contestants_per_campaign: number;
            max_votes_per_month: number;
            max_team_members: number;
            platform_fee_percentage: number;
        };
        usage: {
            campaigns: number;
            team_members: number;
            votes_this_month: number;
        };
    }>;
    subscribe(user: User, body: {
        plan: string;
        billing_cycle: 'monthly' | 'yearly';
    }): Promise<{
        message: string;
        authorization_url?: undefined;
        access_code?: undefined;
        reference?: undefined;
        subscription_id?: undefined;
    } | {
        authorization_url: string;
        access_code: string;
        reference: string;
        subscription_id: string;
        message?: undefined;
    }>;
    verifyPayment(reference: string): Promise<import("./entities/subscription.entity").Subscription>;
    cancelSubscription(user: User): Promise<{
        message: string;
    }>;
    activateFreePlan(user: User): Promise<{
        message: string;
    }>;
    handlePaystackWebhook(req: RawBodyRequest<Request>, signature: string, payload: any): Promise<{
        status: string;
        message: string;
    }>;
}
