import { OnModuleInit } from '@nestjs/common';
import { Model } from 'mongoose';
import { AudioItem, AudioItemDocument } from './audio.model';
import { ITranscriptionModelInfo } from './audio.interface';
import { IFullUser } from '../users/users.interface';
import { WhisperTranscriptionService } from './providers/whisper-transcription.service';
import { GeminiTranscriptionService } from './providers/gemini-transcription.service';
import { IvritAiTranscriptionService } from './providers/ivrit-ai-transcription.service';
import { CostTrackerService } from '../cost-tracker/cost-tracker.service';
export declare const MAX_UPLOAD_SIZE_MB = 500;
export declare class AudioService implements OnModuleInit {
    private readonly itemModel;
    private readonly whisper;
    private readonly gemini;
    private readonly ivritAi;
    private readonly costTracker;
    private readonly logger;
    constructor(itemModel: Model<AudioItemDocument>, whisper: WhisperTranscriptionService, gemini: GeminiTranscriptionService, ivritAi: IvritAiTranscriptionService, costTracker: CostTrackerService);
    onModuleInit(): Promise<void>;
    private isWhitelisted;
    assertAccess(user: IFullUser | null | undefined): void;
    listModels(): ITranscriptionModelInfo[];
    private compressForProvider;
    private resolveProvider;
    list(user: IFullUser): Promise<Partial<AudioItem>[]>;
    get(user: IFullUser, id: string): Promise<AudioItemDocument>;
    update(user: IFullUser, id: string, dto: {
        title?: string;
        text?: string;
    }): Promise<AudioItemDocument>;
    delete(user: IFullUser, id: string): Promise<{
        deleted: true;
    }>;
    getAudioFile(user: IFullUser, id: string): Promise<{
        filePath: string;
        mimeType: string;
        fileName: string;
    }>;
    assertCreditsAvailable(user: IFullUser): Promise<void>;
    getUserMonthlySpentUsd(userId: string): Promise<number>;
    getUsageSummary(user: IFullUser): Promise<{
        monthlySpentUsd: number;
        monthlyCapUsd: number;
        remainingUsd: number;
        maxMinutesPerCall: number;
        periodStart: string;
        periodEnd: string;
    }>;
    private probeDurationFromFile;
    startTranscription(user: IFullUser, file: {
        buffer: Buffer;
        originalname: string;
        mimetype: string;
        size: number;
    }, options: {
        modelId?: string;
        title?: string;
        language?: string;
    }): Promise<AudioItemDocument>;
    private processInBackground;
}
