/**
 * 📊 SISTEMA DE LOGS DE PERFORMANCE
 *
 * Sistema completo de monitoramento de performance para aplicações Angular
 * com feedback visual através de emojis e relatórios automáticos.
 *
 * Características:
 * - 📈 Monitoramento em Tempo Real
 * - 🟢🟡🔴 Classificação Visual por Performance
 * - ⏰ Relatórios Automáticos após Inatividade
 * - 📊 Análise Detalhada com Recomendações
 * - 🛠️ API Pública para Controle Manual
 *
 * @author Pedro Henrique dos Santos Leuchs
 * @version 1.0.23
 * @since 2025-07-11
 */
export interface PerformanceStats {
    count: number;
    totalTime: number;
    minTime: number;
    maxTime: number;
    customThresholds?: {
        ok?: number;
        lento?: number;
        critico?: number;
    };
}
export interface DynamicThresholds {
    ok: number;
    lento: number;
    critico: number;
}
export interface InstrumentOptions {
    include?: Array<string | RegExp>;
    exclude?: Array<string | RegExp>;
    nameTransform?: (name: string, path?: string[]) => string;
    preserveToString?: boolean;
    maxDepth?: number;
}
export interface HookSetServiceOptions extends InstrumentOptions {
    includeObjects?: Array<string | RegExp>;
    excludeObjects?: Array<string | RegExp>;
    maxWalkDepth?: number;
    labelFromPath?: (path: string[]) => string;
}
export declare class LogsPerformatico {
    private monitoramentoAtivo;
    private performanceTimers;
    private performanceSummary;
    private serviceName;
    private httpRequests;
    private functionContextStack;
    private eventContextStack;
    private timerStack;
    private lastTimerActivityAt;
    private firstTimerInEventAt;
    private currentEventBeginAt;
    private instrumentedFns;
    constructor(serviceName?: string);
    /**
     * Registra requisição HTTP associando à função monitorada ativa (se houver)
     * @param payload Dados da requisição
     */
    registerHttpRequest(authReq: any, tempo: number, error?: boolean): void;
    private extrairNomeDeSQL;
    /**
     * 🚀 Mensagem de boas-vindas do sistema
     */
    showWelcomeMessage(): void;
    /**
     * ⏱️ Inicia cronômetro para uma operação
     * @param operationName Nome da operação a ser monitorada
     */
    startTimer(operationName: string): void;
    /**
     * 🏁 Finaliza cronômetro e exibe resultado com emoji
     * @param operationName Nome da operação
     * @param customMessage Mensagem customizada opcional (ex: para erros)
     * @param customThresholds Thresholds customizados para esta operação específica
     */
    endTimer(operationName: string, customMessage?: string, customThresholds?: {
        ok?: number;
        lento?: number;
        critico?: number;
    }): void;
    /**
     * 🎨 Determina status de performance baseado no tempo
     * @param elapsedTime Tempo decorrido em milissegundos
     * @param customThresholds Thresholds customizados para esta operação específica
     * @param operationName Nome da operação (para calcular thresholds dinâmicos)
     * @returns Objeto com emoji, status e cor
     */
    private getPerformanceStatus;
    /**
     * 📈 Atualiza estatísticas de performance para o sumário
     * @param operationName Nome da operação
     * @param elapsedTime Tempo decorrido em milissegundos
     * @param customThresholds Thresholds customizados para armazenar (opcional)
     */
    private updatePerformanceSummary;
    /**
     * 📊 Exibe relatório resumido de todas as operações (compactado)
     */
    showPerformanceSummary(showFullDetails?: boolean): void;
    /**
     * 📑 Exibe relatório detalhado de requisições HTTP agrupadas por função
     */
    showHttpRequestsReport(): void;
    /**
     * 🔍 Gera análise detalhada de performance
     */
    generateDetailedAnalysis(): void;
    /**
     * 📋 Categoriza operações por performance
     * @returns Objeto com arrays de operações categorizadas
     */
    private categorizeOperations;
    /**
     * 💡 Exibe recomendações baseadas na análise
     * @param criticalOperations Array de operações críticas
     * @param slowOperations Array de operações lentas
     */
    private showRecommendations;
    /**
     * 📊 Exibe score de performance
     * @param fastOperationsCount Número de operações rápidas
     */
    private showPerformanceScore;
    /**
     * 📊 Método público para exibir relatório de performance
     * Pode ser chamado no console do navegador para análise
     */
    getPerformanceReport(): void;
    /**
     * 🏷️ Controla contexto de evento atual (ex.: AppInit, Click)
     */
    beginEventContext(label: string): void;
    endEventContext(): void;
    runInEventContext<T>(label: string, fn: () => Promise<T> | T): Promise<T>;
    /**
     * 🧹 Método público para limpar dados de performance
     * Útil para resetar estatísticas e começar nova análise
     */
    resetPerformanceData(): void;
    /**
     * ⏰ Configura o delay para relatório por inatividade
     * @param seconds Número de segundos de inatividade para mostrar relatório
     */
    setInactivityDelay(seconds: number): void;
    /**
     * 🔇 Desabilita relatório automático por inatividade
     */
    disableInactivityReport(): void;
    /**
     * ⚙️ Configura o threshold para relatório automático
     * @param threshold Número de operações para mostrar relatório automaticamente
     */
    setAutoReportThreshold(threshold: number): void;
    /**
     * 🔇 Desabilita relatório automático
     */
    disableAutoReport(): void;
    /**
     * 📈 Obtém estatísticas resumidas sem exibir no console
     * @returns Objeto com estatísticas de performance
     */
    getStatistics(): {
        totalOperations: number;
        averageTime: number;
        fastOperations: number;
        slowOperations: number;
        criticalOperations: number;
        performanceScore: number;
    };
    /**
     * 🎯 Obtém dados de uma operação específica
     * @param operationName Nome da operação
     * @returns Estatísticas da operação ou null se não encontrada
     */
    getOperationStats(operationName: string): (PerformanceStats & {
        httpCalls: string[];
    }) | null;
    /**
     * 📋 Lista todas as operações monitoradas
     * @returns Array com nomes das operações
     */
    getMonitoredOperations(): string[];
    /**
     * 🔄 Verifica se há timers ativos
     * @returns true se há timers em execução
     */
    hasActiveTimers(): boolean;
    /**
     * 🗑️ Limpa apenas os timers ativos (não as estatísticas)
     */
    clearActiveTimers(): void;
    /**
     * 🔌 Instrumenta todas as funções públicas de um objeto/instância sem alterar assinatura
     * @param obj Objeto ou instância a instrumentar
     * @param options Filtros e ajustes de nome
     */
    instrumentObject(obj: any, options?: InstrumentOptions): void;
    /**
     * 🌐 Instrumenta funções em um namespace (ex.: window) com filtros e profundidade
     * @param root Objeto raiz (ex.: window)
     * @param options include/exclude, nameTransform, preserveToString, maxDepth
     */
    instrumentNamespace(root: any, options?: InstrumentOptions): void;
    /**
     * 🪝 Envolve a função setService(target.setService) para instrumentar o serviço passado
     * @param target Objeto que possui setService(service)
     * @param label Rótulo usado no nome das operações (ex.: "packTela")
     * @param options Opções de instrumentação (nameTransform, exclude, etc.)
     */
    hookSetService(target: any, label?: string, options?: InstrumentOptions): void;
    /**
     * 🪝 Hook de setService para vários alvos em uma única chamada
     * @param targets Mapa de label -> objeto que contém setService
     * @param options Opções de instrumentação
     */
    hookSetServiceBulk(targets: Record<string, any>, options?: InstrumentOptions): void;
    /**
     * 🌐 Varre um namespace e aplica hook em qualquer função setService encontrada
     * @param root Objeto raiz (ex.: window, module scope wrapper, etc.)
     * @param options Filtros e regras de nomeação
     */
    hookSetServiceNamespace(root: any, options?: HookSetServiceOptions): void;
    /**
     * Cria wrapper que inicia/encerra timer preservando contexto e toString()
     */
    private createWrapper;
    /**
     * 🔎 Tenta inferir o nome do arquivo (pack) a partir do stacktrace
     * Preferência por nomes que começam com "pack"
     */
    private guessFileLabelFromStack;
    /**
     * 💾 Exporta dados de performance para JSON
     * @returns String JSON com todos os dados
     */
    exportData(): string;
    /**
     * 🎯 Calcula thresholds dinâmicos baseados na quantidade de execuções
     * @param executionCount Número de execuções da operação
     * @returns Objeto com thresholds calculados dinamicamente
     */
    private calculateDynamicThresholds;
    injectMonitorButton(): void;
    showEventReport(includeHttp?: boolean): void;
}
/**
 * 🏭 Factory function para criar instância do LogsPerformatico
 * @param serviceName Nome do serviço (para logs personalizados)
 * @returns Nova instância de LogsPerformatico
 */
export declare function createPerformanceLogger(serviceName?: string): LogsPerformatico;
//# sourceMappingURL=log-performatico.d.ts.map