import { type CommonLogger, type ErrorReporter } from '@lokalise/node-core';
import type { MakeRequired, MayOmit } from '@lokalise/universal-ts-utils/node';
import { type HandlerSpy, type HandlerSpyParams, type MessageMetricsManager, type MessageProcessingResult, type PublicHandlerSpy } from '@message-queue-toolkit/core';
import type { BaseOptions } from '@platformatic/kafka';
import type { DeserializedMessage, KafkaConfig, KafkaDependencies, SupportedMessageValues, TopicConfig } from './types.ts';
export type BaseKafkaOptions = {
    kafka: KafkaConfig;
    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 type ProcessedMessage<TopicsConfig extends TopicConfig[]> = MayOmit<Pick<DeserializedMessage<SupportedMessageValues<TopicsConfig>>, 'topic' | 'value' | 'timestamp'>, 'timestamp'>;
export declare abstract class AbstractKafkaService<TopicsConfig extends TopicConfig[], KafkaOptions extends BaseKafkaOptions> {
    protected readonly errorReporter: ErrorReporter;
    protected readonly logger: CommonLogger;
    protected readonly messageMetricsManager?: MessageMetricsManager<SupportedMessageValues<TopicsConfig>>;
    protected readonly options: MakeRequired<KafkaOptions, 'messageIdField'>;
    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 resolveMessageId(message: SupportedMessageValues<TopicsConfig>): string | undefined;
    protected resolveHeaderRequestIdField(): string;
    protected handleMessageProcessed(params: {
        message: ProcessedMessage<TopicsConfig>;
        processingResult: MessageProcessingResult;
        messageProcessingStartTimestamp: number;
    }): void;
    protected handleError(error: unknown, context?: Record<string, unknown>): void;
}
