import { LogLevel } from '../mocks/coreLogger';
/**
 * Runtime configuration for the service logging package
 * This extends the core logger configuration with service-specific options
 */
export interface ServiceLoggingRuntimeConfig {
    /**
     * Global log level for the service logger
     * @default "info"
     */
    level?: LogLevel | keyof typeof LogLevel | string;
    /**
     * Enable correlation tracking across async operations
     * @default true
     */
    enableCorrelation?: boolean;
    /**
     * Enable data sanitization for sensitive fields
     * @default true
     */
    sanitize?: boolean;
    /**
     * Fields to sanitize (will be redacted in logs)
     * @default ["password", "token", "secret", "key", "authorization", "cookie", "apiKey", "accessToken", "refreshToken", "creditCard", "ssn", "socialSecurityNumber"]
     */
    sanitizeFields?: string[];
    /**
     * Service context information
     */
    context?: {
        /**
         * Service name
         * @default "service-logging"
         */
        service?: string;
        /**
         * Service version
         * @default "0.1.12"
         */
        version?: string;
        /**
         * Environment (dev, staging, prod, etc.)
         * @default process.env.NODE_ENV || "development"
         */
        environment?: string;
        /**
         * Server hostname
         * @default process.env.HOSTNAME || "localhost"
         */
        hostname?: string;
        /**
         * Process ID
         * @default process.pid
         */
        pid?: number;
        /**
         * Thread identifier
         */
        thread?: string;
        /**
         * Additional context fields
         */
        [key: string]: any;
    };
    /**
     * System logging configuration
     */
    system?: {
        /**
         * Enable system logging
         * @default true
         */
        enabled?: boolean;
        /**
         * System log level
         * @default "info"
         */
        level?: LogLevel | keyof typeof LogLevel | string;
        /**
         * Console transport configuration
         */
        console?: {
            /**
             * Enable console transport for system logs
             * @default true in development, false in production
             */
            enabled?: boolean;
            /**
             * Console log level
             * @default "debug"
             */
            level?: LogLevel | keyof typeof LogLevel | string;
            /**
             * Formatter type
             * @default "text"
             */
            formatter?: 'text' | 'json' | 'structured';
            /**
             * Formatter options
             */
            formatterOptions?: {
                prettyPrint?: boolean;
                space?: number;
                includeStack?: boolean;
                colorize?: boolean;
                dateFormat?: string;
                prefix?: string;
                delimiter?: string;
                includeTimestamp?: boolean;
                includeHostname?: boolean;
            };
        };
        /**
         * File transport configuration
         */
        file?: {
            /**
             * Enable file transport for system logs
             * @default false in development, true in production
             */
            enabled?: boolean;
            /**
             * Log file path
             * @default "logs/system.log"
             */
            filename?: string;
            /**
             * File log level
             * @default "info"
             */
            level?: LogLevel | keyof typeof LogLevel | string;
            /**
             * Formatter type
             * @default "json"
             */
            formatter?: 'text' | 'json' | 'structured';
            /**
             * Maximum file size before rotation (bytes)
             * @default 10485760 (10MB)
             */
            maxSize?: number;
            /**
             * Maximum number of rotated files to keep
             * @default 5
             */
            maxFiles?: number;
            /**
             * Create directory if it doesn't exist
             * @default true
             */
            createDir?: boolean;
            /**
             * Formatter options
             */
            formatterOptions?: {
                prettyPrint?: boolean;
                space?: number;
                includeStack?: boolean;
                colorize?: boolean;
                dateFormat?: string;
                prefix?: string;
                delimiter?: string;
                includeTimestamp?: boolean;
                includeHostname?: boolean;
            };
        };
        /**
         * HTTP transport configuration
         */
        http?: {
            /**
             * Enable HTTP transport for system logs
             * @default false
             */
            enabled?: boolean;
            /**
             * HTTP endpoint URL
             * @required if enabled
             */
            url?: string;
            /**
             * HTTP log level
             * @default "warn"
             */
            level?: LogLevel | keyof typeof LogLevel | string;
            /**
             * HTTP headers
             */
            headers?: Record<string, string>;
            /**
             * Request timeout (ms)
             * @default 30000
             */
            timeout?: number;
            /**
             * Batch size for sending logs
             * @default 100
             */
            batchSize?: number;
            /**
             * Flush interval (ms)
             * @default 5000
             */
            flushInterval?: number;
            /**
             * Number of retries on failure
             * @default 3
             */
            retries?: number;
        };
    };
    /**
     * Audit logging configuration
     */
    audit?: {
        /**
         * Enable audit logging
         * @default true
         */
        enabled?: boolean;
        /**
         * Audit log level
         * @default "info"
         */
        level?: LogLevel | keyof typeof LogLevel | string;
        /**
         * Console transport configuration for audit logs
         */
        console?: {
            /**
             * Enable console transport for audit logs
             * @default false
             */
            enabled?: boolean;
            /**
             * Console log level
             * @default "info"
             */
            level?: LogLevel | keyof typeof LogLevel | string;
            /**
             * Formatter type
             * @default "json"
             */
            formatter?: 'text' | 'json' | 'structured';
            /**
             * Formatter options
             */
            formatterOptions?: {
                prettyPrint?: boolean;
                space?: number;
                includeStack?: boolean;
                colorize?: boolean;
                dateFormat?: string;
                prefix?: string;
                delimiter?: string;
                includeTimestamp?: boolean;
                includeHostname?: boolean;
            };
        };
        /**
         * File transport configuration for audit logs
         */
        file?: {
            /**
             * Enable file transport for audit logs
             * @default true
             */
            enabled?: boolean;
            /**
             * Log file path
             * @default "logs/audit.log"
             */
            filename?: string;
            /**
             * File log level
             * @default "info"
             */
            level?: LogLevel | keyof typeof LogLevel | string;
            /**
             * Formatter type
             * @default "json"
             */
            formatter?: 'text' | 'json' | 'structured';
            /**
             * Maximum file size before rotation (bytes)
             * @default 10485760 (10MB)
             */
            maxSize?: number;
            /**
             * Maximum number of rotated files to keep
             * @default 5
             */
            maxFiles?: number;
            /**
             * Create directory if it doesn't exist
             * @default true
             */
            createDir?: boolean;
            /**
             * Formatter options
             */
            formatterOptions?: {
                prettyPrint?: boolean;
                space?: number;
                includeStack?: boolean;
                colorize?: boolean;
                dateFormat?: string;
                prefix?: string;
                delimiter?: string;
                includeTimestamp?: boolean;
                includeHostname?: boolean;
            };
        };
        /**
         * Database transport configuration for audit logs
         */
        database?: {
            /**
             * Enable database transport for audit logs
             * @default false
             */
            enabled?: boolean;
            /**
             * Database connection string
             * @required if enabled
             */
            connectionString?: string;
            /**
             * Database table name
             * @default "audit_logs"
             */
            tableName?: string;
            /**
             * Database log level
             * @default "info"
             */
            level?: LogLevel | keyof typeof LogLevel | string;
            /**
             * Maximum connection pool size
             * @default 10
             */
            maxPoolSize?: number;
        };
    };
    /**
     * Error handling configuration
     */
    errorHandling?: {
        /**
         * Enable error callback for transport failures
         * @default false
         */
        enableCallback?: boolean;
        /**
         * Log transport failures to console
         * @default true
         */
        logFailures?: boolean;
    };
}
/**
 * Resolved configuration after merging defaults, config file, and environment variables
 */
export interface ResolvedServiceLoggingConfig {
    level: LogLevel;
    enableCorrelation: boolean;
    sanitize: boolean;
    sanitizeFields: string[];
    context: {
        service: string;
        version: string;
        environment: string;
        hostname: string;
        pid: number;
        thread?: string | undefined;
        [key: string]: any;
    };
    system: {
        enabled: boolean;
        level: LogLevel;
        console?: {
            enabled: boolean;
            level: LogLevel;
            formatter: string;
            formatterOptions?: any;
        };
        file?: {
            enabled: boolean;
            filename: string;
            level: LogLevel;
            formatter: string;
            formatterOptions?: any;
            maxSize: number;
            maxFiles: number;
            createDir: boolean;
        };
        http?: {
            enabled: boolean;
            url: string;
            level: LogLevel;
            headers: Record<string, string>;
            timeout: number;
            batchSize: number;
            flushInterval: number;
            retries: number;
        };
    };
    audit: {
        enabled: boolean;
        level: LogLevel;
        console?: {
            enabled: boolean;
            level: LogLevel;
            formatter: string;
            formatterOptions?: any;
        };
        file?: {
            enabled: boolean;
            filename: string;
            level: LogLevel;
            formatter: string;
            formatterOptions?: any;
            maxSize: number;
            maxFiles: number;
            createDir: boolean;
        };
        database?: {
            enabled: boolean;
            connectionString: string;
            tableName: string;
            level: LogLevel;
            maxPoolSize: number;
        };
    };
    errorHandling: {
        enableCallback: boolean;
        logFailures: boolean;
    };
}
//# sourceMappingURL=types.d.ts.map