import { type CommonLogger, type ErrorReporter } from '@lokalise/node-core';
import { type HandlerSpy, type HandlerSpyParams, type MessageProcessingResult, type PublicHandlerSpy } from '@message-queue-toolkit/core';
import type { BaseOptions } from '@platformatic/kafka';
import type { KafkaConfig, KafkaDependencies, SupportedMessageValues, TopicConfig } from './types.ts';
export type BaseKafkaOptions = {
    kafka: KafkaConfig;
    messageTypeField?: string;
    messageIdField?: string;
    /**
     * The field in the message headers that contains the request ID.
     * This is used to correlate logs and transactions with the request.
     * Defaults to 'x-request-id'.
     */
    headerRequestIdField?: string;
    handlerSpy?: HandlerSpy<object> | HandlerSpyParams | boolean;
    logMessages?: boolean;
} & Omit<BaseOptions, keyof KafkaConfig>;
export declare abstract class AbstractKafkaService<TopicsConfig extends TopicConfig[], KafkaOptions extends BaseKafkaOptions> {
    protected readonly errorReporter: ErrorReporter;
    protected readonly logger: CommonLogger;
    protected readonly options: KafkaOptions;
    protected readonly _handlerSpy?: HandlerSpy<SupportedMessageValues<TopicsConfig>>;
    constructor(dependencies: KafkaDependencies, options: KafkaOptions);
    abstract init(): Promise<void>;
    abstract close(): Promise<void>;
    get handlerSpy(): PublicHandlerSpy<SupportedMessageValues<TopicsConfig>>;
    protected resolveMessageType(message: SupportedMessageValues<TopicsConfig>): string | undefined;
    protected resolveMessageId(message: SupportedMessageValues<TopicsConfig>): string | undefined;
    protected resolveHeaderRequestIdField(): string;
    protected handleMessageProcessed(params: {
        message: SupportedMessageValues<TopicsConfig>;
        processingResult: MessageProcessingResult;
        topic: string;
    }): void;
    protected handlerError(error: unknown, context?: Record<string, unknown>): void;
}
