import { Middleware, MiddlewareAsync, MiddlewareResult } from '../middlewares/shared.js';
/**
 * Enum representing logging levels mapped to numeric priorities
 * @enum {number}
 * @property {number} error - Highest priority error level (0)
 * @property {number} warn - Warning level (1)
 * @property {number} help - Help information (2)
 * @property {number} data - Data tracing (3)
 * @property {number} info - General information (4)
 * @property {number} debug - Debug-level messages (5)
 * @property {number} prompt - Prompt messages (6)
 * @property {number} verbose - Verbose output (7)
 * @property {number} input - Input tracing (8)
 * @property {number} silly - Lowest priority tracing (9)
 */
export declare enum LogLevels {
    error = 0,
    warn = 1,
    help = 2,
    data = 3,
    info = 4,
    debug = 5,
    prompt = 6,
    verbose = 7,
    input = 8,
    silly = 9
}
export interface LogContext {
    level: LogLevels;
    namespaces: string[];
    message: string;
    values: unknown[];
}
export interface ILogMiddleware extends Middleware<[LogLevels, string[], ...unknown[]]> {
    shouldHandle(logLevel: LogLevels, namespaces: string[]): boolean;
}
export interface ILogMiddlewareAsync extends MiddlewareAsync<[LogLevels, string[], ...unknown[]]> {
    shouldHandle(logLevel: LogLevels, namespaces: string[]): boolean;
}
export type ILogger<TLogger = ILogMiddleware> = {
    [key in Exclude<keyof typeof LogLevels, number>]: TLogger;
};
export type ILoggerAsync = ILogger<ILogMiddlewareAsync>;
export declare class LoggerAdapterMiddleware<TLogger extends ILogger | ILoggerAsync> {
    private readonly logger;
    constructor(logger: TLogger);
    handle(logLevel: LogLevels, namespaces: string[], ...context: unknown[]): TLogger extends ILoggerAsync ? Promise<MiddlewareResult> : MiddlewareResult;
}
export declare const logConfig: {
    defaultLevel: LogLevels;
    namespaceConfig: LogConfig;
};
export declare function configureLogging(config: {
    defaultLevel?: LogLevels;
    namespaceConfig?: EasyLogConfig;
}): void;
type LogConfig = {
    [key: string]: {
        level?: LogLevels;
    } & LogConfig;
};
export type EasyLogConfig = {
    [key: string]: LogLevels | EasyLogConfig;
};
export declare class LoggerMiddleware<TLogger extends ILogMiddleware | ILogMiddlewareAsync> {
    private readonly logger;
    readonly logLevel: LogLevels;
    readonly namespace: string;
    constructor(logger: TLogger['handle'] | ((...args: Parameters<TLogger['handle']>) => void), logLevel: LogLevels, namespace: string);
    handle(logLevel: LogLevels, namespaces: string[], ...context: unknown[]): Promise<MiddlewareResult>;
    handle(logLevel: LogLevels, namespaces: string[], ...context: unknown[]): MiddlewareResult;
    handle(logLevel: LogLevels, namespaces: string[], ...context: unknown[]): TLogger extends ILogMiddlewareAsync ? Promise<MiddlewareResult> : MiddlewareResult;
    handle(logLevel: LogLevels, namespaces: string[], ...context: unknown[]): Promise<MiddlewareResult> | MiddlewareResult;
    shouldHandle(logLevel: LogLevels, namespaces: string[]): boolean;
}
export declare class LogMiddlewareWrapper<TLogger extends ILogMiddleware | ILogMiddlewareAsync> {
    private readonly logger;
    readonly logLevel: LogLevels;
    readonly namespace: string;
    constructor(logger: TLogger, logLevel: LogLevels, namespace: string);
    handle(logLevel: LogLevels, namespaces: string[], ...context: unknown[]): Promise<MiddlewareResult>;
    handle(logLevel: LogLevels, namespaces: string[], ...context: unknown[]): MiddlewareResult;
    handle(logLevel: LogLevels, namespaces: string[], ...context: unknown[]): TLogger extends ILogMiddlewareAsync ? Promise<MiddlewareResult> : MiddlewareResult;
    handle(logLevel: LogLevels, namespaces: string[], ...context: unknown[]): Promise<MiddlewareResult> | MiddlewareResult;
    shouldHandle(logLevel: LogLevels, namespaces: string[]): boolean;
}
export declare const emojiMap: {
    smile: string;
    thumbsup: string;
    heart: string;
    fire: string;
    star: string;
    cry: string;
    laugh: string;
    wink: string;
    clap: string;
    angry: string;
    shocked: string;
    cool: string;
    poop: string;
    party: string;
    thinking: string;
    pray: string;
    hug: string;
    ok: string;
    eyes: string;
    grin: string;
    sleepy: string;
    kiss: string;
    celebration: string;
    check: string;
    cross: string;
    question: string;
    wave: string;
    rocket: string;
    100: string;
};
export {};
