import { LogWriter } from "../writer";
import { Entity } from "./types";
export interface ContainerLister {
    onEnd: () => void;
}
export type BaseConfig = {
    id: string;
    spanId?: string;
    name?: string;
    tags?: Record<string, string>;
};
export declare abstract class BaseContainer {
    protected readonly entity: Entity;
    protected _id: string;
    protected _name?: string;
    protected spanId?: string;
    protected readonly startTimestamp: Date;
    protected endTimestamp?: Date;
    protected tags: Record<string, string>;
    protected readonly writer: LogWriter;
    constructor(entity: Entity, config: BaseConfig, writer: LogWriter);
    get id(): string;
    addTag(key: string, value: string): void;
    static addTag_(writer: LogWriter, entity: Entity, id: string, key: string, value: string): void;
    addMetadata(metadata: Record<string, unknown>): void;
    static addMetadata_(writer: LogWriter, entity: Entity, id: string, metadata: Record<string, unknown>): void;
    end(): void;
    static end_(writer: LogWriter, entity: Entity, id: string, data?: any): void;
    data(): any;
    protected commit(action: string, data?: any): void;
    protected static commit_(writer: LogWriter, entity: Entity, id: string, action: string, data?: any): void;
}
export declare abstract class EvaluatableBaseContainer extends BaseContainer {
    get evaluate(): EvaluateContainer;
    static evaluate_(writer: LogWriter, entity: Entity, id: string): EvaluateContainer;
}
export declare abstract class EventEmittingBaseContainer extends EvaluatableBaseContainer {
    event(id: string, name: string, tags?: Record<string, string>, metadata?: Record<string, unknown>): void;
    static event_(writer: LogWriter, entity: Entity, id: string, eventId: string, name: string, tags?: Record<string, string>, metadata?: Record<string, unknown>): void;
}
export declare class EvaluateContainer {
    private _writer;
    private _entity;
    private _id;
    constructor(writer: LogWriter, entity: Entity, id: string);
    withVariables<T extends string = string>(variables: Record<T, string>, forEvaluators: string[]): void;
    withEvaluators<T extends string = string>(...evaluators: string[]): {
        withVariables: <U extends string = T>(variables: Record<U, string>) => void;
    };
}
