import { Repository } from 'typeorm';
import { ConfigService } from '@nestjs/config';
import { Plan } from './entities/plan.entity';
import { Subscription, SubscriptionStatus } from './entities/subscription.entity';
import { Organization, OrganizationPlan } from '../organizations/entities/organization.entity';
import { PaystackService } from './paystack.service';
import { NotificationsService } from '../notifications/notifications.service';
export declare class BillingService {
    private plansRepository;
    private subscriptionsRepository;
    private organizationsRepository;
    private configService;
    private paystackService;
    private notificationsService;
    constructor(plansRepository: Repository<Plan>, subscriptionsRepository: Repository<Subscription>, organizationsRepository: Repository<Organization>, configService: ConfigService, paystackService: PaystackService, notificationsService: NotificationsService);
    getAllPlans(): Promise<Plan[]>;
    getPlanBySlug(slug: string): Promise<Plan>;
    seedPlans(): Promise<void>;
    getOrganizationSubscription(organizationId: string): Promise<Subscription | null>;
    getSubscriptionHistory(organizationId: string): Promise<Subscription[]>;
    initializeSubscription(organizationId: string, planSlug: string, billingCycle: 'monthly' | 'yearly', email: string, userName?: string): 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;
    }>;
    verifyAndActivateSubscription(reference: string): Promise<Subscription>;
    activateFreePlan(organizationId: string): Promise<void>;
    cancelSubscription(organizationId: string): Promise<void>;
    checkAndExpireSubscriptions(): Promise<void>;
    getOrganizationUsage(organizationId: string): Promise<{
        plan: 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;
        };
    }>;
    processPaystackWebhook(event: string, data: any): Promise<{
        status: string;
        message: string;
    }>;
    waiveSubscription(organizationId: string, planSlug: string, durationMonths: number, reason?: string): Promise<Subscription>;
    extendSubscription(organizationId: string, additionalMonths: number): Promise<Subscription | null>;
    forceChangePlan(organizationId: string, planSlug: string, expiresAt?: Date): Promise<void>;
    getAllSubscriptions(params?: {
        status?: SubscriptionStatus;
        plan?: string;
        page?: number;
        limit?: number;
    }): Promise<{
        subscriptions: Subscription[];
        total: number;
    }>;
    private getPlanEnum;
}
