/**
 * Port: Structured logging.
 *
 * All pipeline output flows through this interface. Adapters control
 * formatting (emoji console, plain text, JSON, silent) without
 * changing the calling code.
 *
 * This is the first port introduced in the Ports & Adapters migration.
 * It establishes the pattern: interface in core, adapters in eval.
 */
import type { StepResult } from "../types/index.js";
/**
 * Logger port — the contract for all pipeline output.
 *
 * Implementations:
 * - ConsoleLogger  — emoji-prefix human output (default)
 * - QuietLogger    — errors and failures only
 * - JsonLogger     — NDJSON machine-readable output
 * - SilentLogger   — captures messages for test assertions
 */
export interface Logger {
    /** Debug-level output (only shown with --verbose) */
    debug(msg: string, ctx?: Record<string, unknown>): void;
    /** Informational output (shown by default) */
    info(msg: string, ctx?: Record<string, unknown>): void;
    /** Warning output (always shown unless --quiet) */
    warn(msg: string, ctx?: Record<string, unknown>): void;
    /** Error output (always shown) */
    error(msg: string, ctx?: Record<string, unknown>): void;
    /** Pipeline step result (formatted with timing, icon, and summary) */
    step(name: string, result: StepResult): void;
    /** Section header (═══ formatted) */
    section(title: string): void;
    /** Table output (for score matrices, comparison tables, etc.) */
    table(headers: string[], rows: string[][]): void;
}
