import { HighWaterMarkRepository } from '../../repository/highWaterMark/HighWaterMarkRepository';
import { MonthlyProrationTeamRepository } from '../../repository/proration/MonthlyProrationTeamRepository';
import { SeatChangeLogRepository } from '../../repository/seatChangeLogs/SeatChangeLogRepository';
import { IFeaturesRepository } from '../../../../flags/features.repository.interface';
import { Prisma } from '../../../../../kysely/types.ts';
export interface SeatChangeLogParams {
    teamId: number;
    userId?: number;
    triggeredBy?: number;
    seatCount?: number;
    metadata?: Prisma.InputJsonValue;
    monthKey?: string;
    operationId?: string;
}
export interface MonthlyChanges {
    additions: number;
    removals: number;
    netChange: number;
}
export interface SeatChangeTrackingServiceDeps {
    repository?: SeatChangeLogRepository;
    highWaterMarkRepo?: HighWaterMarkRepository;
    teamRepo?: MonthlyProrationTeamRepository;
    featuresRepository?: IFeaturesRepository;
}
export declare class SeatChangeTrackingService {
    private repository;
    private highWaterMarkRepo;
    private teamRepo;
    private featuresRepository;
    constructor(repositoryOrDeps?: SeatChangeLogRepository | SeatChangeTrackingServiceDeps, highWaterMarkRepo?: HighWaterMarkRepository, teamRepo?: MonthlyProrationTeamRepository);
    logSeatAddition(params: SeatChangeLogParams): Promise<void>;
    private updateHighWaterMarkIfNeeded;
    logSeatRemoval(params: SeatChangeLogParams): Promise<void>;
    getMonthlyChanges(params: {
        teamId: number;
        monthKey: string;
    }): Promise<MonthlyChanges>;
    getUnprocessedChanges(params: {
        teamId: number;
        monthKey: string;
    }): Promise<{
        userId: number | null;
        metadata: import('@prisma/client/runtime/client').JsonValue | null;
        id: string;
        createdAt: Date;
        teamId: number;
        operationId: string | null;
        changeType: import('../../../../../kysely/types.ts').SeatChangeType;
        seatCount: number;
        triggeredBy: number | null;
        changeDate: Date;
        monthKey: string;
        processedInProrationId: string | null;
        teamBillingId: string | null;
        organizationBillingId: string | null;
    }[]>;
    markAsProcessed(params: {
        teamId: number;
        monthKey: string;
        prorationId: string;
    }): Promise<number>;
}
//# sourceMappingURL=SeatChangeTrackingService.d.ts.map