import { PrismaClient } from '../../../../../prisma';
export interface BillingInfo {
    id: string;
    subscriptionId: string;
    subscriptionItemId: string | null;
    customerId: string;
    subscriptionStart: Date | null;
    subscriptionEnd: Date | null;
    pricePerSeat: number | null;
    billingPeriod: string | null;
    paidSeats: number | null;
}
export interface TeamWithBilling {
    id: number;
    isOrganization: boolean;
    metadata: unknown;
    billing: BillingInfo | null;
    memberCount: number;
}
export declare class MonthlyProrationTeamRepository {
    private prisma;
    constructor(prisma?: PrismaClient);
    getTeamWithBilling(teamId: number): Promise<TeamWithBilling | null>;
    getAnnualTeamsWithSeatChanges(monthKey: string): Promise<number[]>;
    updateBillingInfo(teamId: number, isOrganization: boolean, billingId: string, data: {
        billingPeriod?: "MONTHLY" | "ANNUALLY";
        pricePerSeat?: number;
        subscriptionStart?: Date;
        subscriptionEnd?: Date;
    }): Promise<void>;
    updatePaidSeats(teamId: number, isOrganization: boolean, billingId: string, paidSeats: number): Promise<void>;
    getTeamMemberCount(teamId: number): Promise<number | null>;
    createOrganizationBilling(data: {
        teamId: number;
        subscriptionId: string;
        subscriptionItemId: string;
        customerId: string;
        status: string;
        planName: string;
        billingPeriod: "MONTHLY" | "ANNUALLY";
        pricePerSeat: number;
        paidSeats: number;
        subscriptionStart: Date | null;
        subscriptionEnd: Date | null;
        subscriptionTrialEnd: Date | null;
    }): Promise<{
        status: string;
        id: string;
        createdAt: Date;
        updatedAt: Date;
        teamId: number;
        subscriptionId: string;
        customerId: string;
        billingPeriod: import('../../../../../kysely/types.ts').BillingPeriod | null;
        pricePerSeat: number | null;
        subscriptionItemId: string;
        planName: string;
        subscriptionStart: Date | null;
        subscriptionTrialEnd: Date | null;
        subscriptionEnd: Date | null;
        paidSeats: number | null;
        highWaterMark: number | null;
        highWaterMarkPeriodStart: Date | null;
    }>;
    createTeamBilling(data: {
        teamId: number;
        subscriptionId: string;
        subscriptionItemId: string;
        customerId: string;
        status: string;
        planName: string;
        billingPeriod: "MONTHLY" | "ANNUALLY";
        pricePerSeat: number;
        paidSeats: number;
        subscriptionStart: Date | null;
        subscriptionEnd: Date | null;
        subscriptionTrialEnd: Date | null;
    }): Promise<{
        status: string;
        id: string;
        createdAt: Date;
        updatedAt: Date;
        teamId: number;
        subscriptionId: string;
        customerId: string;
        billingPeriod: import('../../../../../kysely/types.ts').BillingPeriod | null;
        pricePerSeat: number | null;
        subscriptionItemId: string;
        planName: string;
        subscriptionStart: Date | null;
        subscriptionTrialEnd: Date | null;
        subscriptionEnd: Date | null;
        paidSeats: number | null;
        highWaterMark: number | null;
        highWaterMarkPeriodStart: Date | null;
    }>;
    private extractBillingFromMetadata;
}
//# sourceMappingURL=MonthlyProrationTeamRepository.d.ts.map