import { Color } from '@lsk4/colors';

type LoggerLevelType = 'fatal' | 'error' | 'warn' | 'debug' | 'info' | 'trace' | 'log';
interface ILoggerProps {
    prefix?: string;
    ns?: string;
    name?: string;
    level?: LoggerLevelType;
    format?: string;
    on?: Array<RegExp>;
    off?: Array<RegExp>;
}
interface ILoggerMessage {
    code?: any;
    name?: string | null;
    ns?: string | null;
    level?: string | number;
    time?: string | number | Date;
    msg?: string | null;
    data?: any;
}
interface ILogger extends ILoggerProps {
    trace(...args: any[]): void;
    info(...args: any[]): void;
    debug(...args: any[]): void;
    warn(...args: any[]): void;
    error(...args: any[]): void;
    fatal(...args: any[]): void;
    log(...args: any[]): void;
    createChild(...propsArray: ILoggerProps[]): ILogger;
}
type ILoggerMeta = {
    ns?: string;
    name?: string;
    level?: LoggerLevelType;
    time?: Date;
    method?: string;
    host?: string;
    reqId?: string | number;
    ua?: string;
    ip?: string;
    url?: string;
    status?: string;
    duration?: number;
    length?: number;
};
declare enum ILoggerInternalMessageFormat {
    bunyan = "bunyan",
    lsklog = "lsklog",
    lsklogweb = "lsklogweb",
    logrus = "logrus",
    raw = "raw"
}
type ILoggerInternalMessage = {
    format: ILoggerInternalMessageFormat | null;
    meta: ILoggerMeta;
    args: any[];
};
type ThemeKey = LoggerLevelType;
type Theme = Record<ThemeKey, Color[]>;

export { type ILogger, type ILoggerInternalMessage, ILoggerInternalMessageFormat, type ILoggerMessage, type ILoggerMeta, type ILoggerProps, type LoggerLevelType, type Theme, type ThemeKey };
