import { LoggerlessTransportConfig, LoggerlessTransport, LogLayerTransportParams } from '@loglayer/transport';
import { ChalkInstance } from 'chalk';
export * from 'chalk';

/**
 * Configuration for log level colors.
 * Each log level can have its own chalk styling.
 */
interface ColorConfig {
    /** Style for trace level logs - lowest severity */
    trace?: ChalkInstance;
    /** Style for debug level logs */
    debug?: ChalkInstance;
    /** Style for info level logs - normal operation */
    info?: ChalkInstance;
    /** Style for warning level logs */
    warn?: ChalkInstance;
    /** Style for error level logs */
    error?: ChalkInstance;
    /** Style for fatal level logs - highest severity */
    fatal?: ChalkInstance;
}
/**
 * Configuration for log view styling.
 * Defines colors and styles for different log elements.
 */
interface ViewConfig {
    /** Color configuration for different log levels */
    colors?: ColorConfig;
    /** Style for log entry IDs */
    logIdColor?: ChalkInstance;
    /** Style for data values in structured data */
    dataValueColor?: ChalkInstance;
    /** Style for data keys in structured data */
    dataKeyColor?: ChalkInstance;
}
/**
 * Runtime environment for the transport.
 * Determines how logs are output.
 */
type Runtime = "node" | "browser";
/**
 * Theme configuration for the simple pretty terminal transport.
 * Defines styling for log output.
 */
interface SimplePrettyTerminalTheme extends ViewConfig {
}
/**
 * View modes for log display.
 * - inline: Shows all information with complete data structures inline (no truncation)
 * - message-only: Shows only the timestamp, log level and message for a cleaner output (no data shown)
 * - expanded: Shows timestamp, level, and message on first line, with data on indented separate lines
 */
type PrettyTerminalViewMode = "inline" | "message-only" | "expanded";
/**
 * Main configuration interface for SimplePrettyTerminalTransport.
 * Extends the base transport configuration with simple pretty terminal specific options.
 */
interface SimplePrettyTerminalConfig extends LoggerlessTransportConfig {
    /** Maximum depth for inline data display before collapsing. Default is 4. */
    maxInlineDepth?: number;
    /** Custom theme configuration for log display */
    theme?: SimplePrettyTerminalTheme;
    /** Whether the transport is enabled. If false, all operations will no-op. Defaults to true */
    enabled?: boolean;
    /** View mode for log display. Defaults to "inline" */
    viewMode?: PrettyTerminalViewMode;
    /** Whether to show log IDs in the output. Defaults to false */
    showLogId?: boolean;
    /** Custom timestamp format. Can be a date-fns format string or a custom function. Defaults to "HH:mm:ss.SSS" */
    timestampFormat?: string | ((timestamp: number) => string);
    /** Whether to collapse arrays in expanded mode. Defaults to true */
    collapseArrays?: boolean;
    /** Whether to flatten nested objects with dot notation in inline mode. Defaults to true */
    flattenNestedObjects?: boolean;
    /** Runtime environment for output */
    runtime: Runtime;
    /** Whether to include data object as second parameter in browser console calls for better debugging. Defaults to false */
    includeDataInBrowserConsole?: boolean;
}

/**
 * A transport for LogLayer that provides simple pretty terminal output.
 * This transport displays logs with theming and formatting but without interactive features.
 *
 * Features:
 * - Real-time log display with color-coded levels
 * - Configurable themes and colors
 * - Three view modes: inline, message-only, expanded
 * - JSON data pretty printing
 * - No interactive features (no keyboard navigation, no input)
 * - Browser and Node.js runtime support
 *
 * Usage:
 * ```typescript
 * const transport = new SimplePrettyTerminalTransport({
 *   maxInlineDepth: 4,
 *   maxInlineLength: 120,
 *   theme: customTheme,
 *   viewMode: "inline",
 *   runtime: "node" // or "browser"
 * });
 * ```
 */

/**
 * Main transport class that handles simple pretty terminal output.
 * This class provides the display functionality of PrettyTerminal without interactive features.
 *
 * The transport supports three view modes:
 * 1. Inline: Shows all information with complete data structures inline (no truncation)
 * 2. Message-only: Shows only the timestamp, log level and message for a cleaner output (no data shown)
 * 3. Expanded: Shows timestamp, level, and message on first line, with data on indented separate lines
 */
declare class SimplePrettyTerminalTransport extends LoggerlessTransport {
    /** Handles rendering and formatting of logs */
    private renderer;
    /** Configuration options */
    private config;
    /**
     * Creates a new SimplePrettyTerminalTransport instance.
     *
     * @param config - Configuration options for the transport
     */
    constructor(config: SimplePrettyTerminalConfig);
    /**
     * Generates a random ID for each log entry.
     * Uses base36 encoding for compact, readable IDs.
     *
     * @returns A 6-character string ID
     * @example
     * "a1b2c3" // Example generated ID
     */
    private generateId;
    /**
     * Main transport method that receives logs from LogLayer.
     * This method is called for each log event and handles:
     * - Generating a unique ID for the log
     * - Converting the log data to a storable format
     * - Rendering the log using the SimpleView renderer
     *
     * @param logLevel - The severity level of the log
     * @param messages - Array of message strings to be joined
     * @param data - Additional structured data to be logged
     * @param hasData - Whether the log includes additional data
     * @returns The original messages array
     */
    shipToLogger({ logLevel, messages, data, hasData }: LogLayerTransportParams): any[];
    /**
     * Changes the view mode for log display.
     *
     * @param viewMode - The new view mode to use
     */
    setViewMode(viewMode: PrettyTerminalViewMode): void;
    /**
     * Gets the current view mode.
     *
     * @returns The current view mode
     */
    getViewMode(): PrettyTerminalViewMode;
}

/**
 * Moonlight - A dark theme with cool blue tones
 * Inspired by moonlit nights and modern IDEs
 *
 * Color Palette:
 * - Primary: Cool blues and soft greens
 * - Accents: Warm yellows and soft reds
 * - Background: Assumes dark terminal (black or very dark grey)
 *
 * Best used with:
 * - Dark terminal themes
 * - Night-time coding sessions
 * - Environments where eye strain is a concern
 */
declare const moonlight: SimplePrettyTerminalTheme;
/**
 * Sunlight - A light theme with warm tones
 * Inspired by daylight reading and paper documentation
 *
 * Color Palette:
 * - Primary: Deep, rich colors that contrast well with white
 * - Accents: Earth tones and deep jewel tones
 * - Background: Assumes light terminal (white or very light grey)
 *
 * Best used with:
 * - Light terminal themes
 * - Daytime coding sessions
 * - High-glare environments
 * - Printed documentation
 */
declare const sunlight: SimplePrettyTerminalTheme;
/**
 * Neon - A dark theme with vibrant cyberpunk colors
 * Inspired by neon-lit cityscapes and retro-futuristic aesthetics
 *
 * Color Palette:
 * - Primary: Electric blues and hot pinks
 * - Accents: Bright purples and cyber greens
 * - Background: Assumes dark terminal (black or very dark grey)
 *
 * Best used with:
 * - Dark terminal themes
 * - High-contrast preferences
 * - Modern, tech-focused applications
 */
declare const neon: SimplePrettyTerminalTheme;
/**
 * Nature - A light theme with organic, earthy colors
 * Inspired by forest landscapes and natural elements
 *
 * Color Palette:
 * - Primary: Deep forest greens and rich browns
 * - Accents: Autumn reds and golden yellows
 * - Background: Assumes light terminal (white or very light grey)
 *
 * Best used with:
 * - Light terminal themes
 * - Nature-inspired interfaces
 * - Applications focusing on readability
 */
declare const nature: SimplePrettyTerminalTheme;
/**
 * Pastel - A soft, calming theme with gentle colors
 * Inspired by watercolor paintings and soft aesthetics
 *
 * Color Palette:
 * - Primary: Soft pastels and muted tones
 * - Accents: Gentle pinks and light blues
 * - Background: Assumes light terminal (white or very light grey)
 *
 * Best used with:
 * - Light terminal themes
 * - Long coding sessions
 * - Reduced visual stress
 */
declare const pastel: SimplePrettyTerminalTheme;

declare function getSimplePrettyTerminal(config: SimplePrettyTerminalConfig): SimplePrettyTerminalTransport;

export { type PrettyTerminalViewMode, type Runtime, type SimplePrettyTerminalConfig, type SimplePrettyTerminalTheme, SimplePrettyTerminalTransport, getSimplePrettyTerminal, moonlight, nature, neon, pastel, sunlight };
