import { Client } from 'discord.js';
import { Logger } from './Logger';
import type { VerseDatabase } from '../types';
export type CommandType = 'slash' | 'prefix';
export interface CommandUsage {
    count: number;
    type: CommandType;
}
export interface MostUsedCommand {
    name: string;
    uses: number;
    type: CommandType;
}
export interface DatabaseStats {
    adapter: string;
    keys: number;
    size?: number;
}
export interface DatabaseStore {
    name: string;
    adapter: string;
    status: 'connected' | 'down';
    keys?: number;
    size?: number;
    info?: string;
}
export interface BotInfo {
    ownerId?: string;
    botInvite?: string;
    serverInvite?: string;
    avatar?: string;
    serverId?: string;
}
export interface MusicStats {
    enabled: boolean;
    library?: string;
    nodesTotal?: number;
    nodesConnected?: number;
    players?: number;
    playing?: number;
    defaultSearch?: string;
}
export interface GenerateStatsOptions {
    BotInfo?: BotInfo;
}
export declare class BotStatistics {
    private musicStats?;
    private logger;
    private startTime;
    private commandUsage;
    private eventTriggers;
    private printedOnce;
    private totalCommandsExecuted;
    private totalEventsTriggered;
    private responseTimes;
    private errorCount;
    private totalRequests;
    private loadedSlashCommands;
    private loadedPrefixCommands;
    private loadedEvents;
    private dbStats?;
    private dbStores;
    constructor(logger?: Logger);
    setDatabaseStats(stats?: DatabaseStats): void;
    setMusicStats(stats?: MusicStats): void;
    setDatabaseStores(stores: DatabaseStore[] | undefined): void;
    resetPrintedFlag(): void;
    loadDatabaseStatsFrom(db?: VerseDatabase): Promise<void>;
    initialize(client: Client): void;
    setLoadedCommands(slashCount: number, prefixCount: number): void;
    setLoadedEvents(eventCount: number): void;
    trackCommand(commandName: string, type: CommandType, responseTime?: number): void;
    trackEvent(eventName: string): void;
    trackError(): void;
    generateTableStats(client: Client, options: GenerateStatsOptions, databaseStats?: DatabaseStats): Promise<void>;
    generateStatsDisplay(client: Client): Promise<string>;
    get loadedEventsCount(): number;
    get loadedSlashCommandsCount(): number;
    get loadedPrefixCommandsCount(): number;
    private setupEventTracking;
    private getMostUsedCommand;
    private getAverageResponseTime;
    private getErrorRate;
    private formatBytes;
    private formatUptime;
}
//# sourceMappingURL=BotStatistics.d.ts.map