import { HighWaterMarkRepository } from '../../repository/highWaterMark/HighWaterMarkRepository';
import { MonthlyProrationTeamRepository } from '../../repository/proration/MonthlyProrationTeamRepository';
import { IFeaturesRepository } from '../../../../flags/features.repository.interface';
import { Logger } from 'tslog';
import { IBillingProviderService } from '../billingProvider/IBillingProviderService';
export interface HighWaterMarkUpdateResult {
    updated: boolean;
    previousHighWaterMark: number | null;
    newHighWaterMark: number;
}
export interface HighWaterMarkServiceDeps {
    logger?: Logger<unknown>;
    repository?: HighWaterMarkRepository;
    teamRepository?: MonthlyProrationTeamRepository;
    billingService?: IBillingProviderService;
    featuresRepository?: IFeaturesRepository;
}
export declare class HighWaterMarkService {
    private logger;
    private repository;
    private teamRepository;
    private billingService?;
    private featuresRepository;
    constructor(deps?: HighWaterMarkServiceDeps);
    shouldApplyHighWaterMark(teamId: number): Promise<boolean>;
    updateHighWaterMarkOnSeatAddition(params: {
        teamId: number;
        currentPeriodStart: Date;
    }): Promise<HighWaterMarkUpdateResult | null>;
    resetHighWaterMark(params: {
        teamId: number;
        isOrganization: boolean;
        newPeriodStart: Date;
    }): Promise<void>;
    applyHighWaterMarkToSubscription(subscriptionId: string): Promise<boolean>;
    getHighWaterMarkData(teamId: number): Promise<import('../../repository/highWaterMark/HighWaterMarkRepository').HighWaterMarkData | null>;
    /**
     * Reset subscription quantity to current member count after a billing period renewal.
     * This allows seats to scale DOWN when members have been removed during the previous period.
     *
     * Flow:
     * 1. invoice.upcoming: applyHighWaterMarkToSubscription sets quantity to HWM (peak)
     * 2. Stripe generates invoice for HWM seats
     * 3. customer.subscription.updated (period change): This method resets to current members
     */
    resetSubscriptionAfterRenewal(params: {
        subscriptionId: string;
        newPeriodStart: Date;
    }): Promise<boolean>;
}
//# sourceMappingURL=HighWaterMarkService.d.ts.map