import type { QueueConsumerDependencies } from '@message-queue-toolkit/core';
import { type ConsumeOptions, type ConsumerOptions } from '@platformatic/kafka';
import { AbstractKafkaService, type BaseKafkaOptions } from './AbstractKafkaService.ts';
import type { KafkaHandlerRouting } from './handler-routing/KafkaHandlerRoutingBuilder.ts';
import type { KafkaConfig, KafkaDependencies, TopicConfig } from './types.ts';
import { type KafkaMessageBatchOptions } from './utils/KafkaMessageBatchStream.ts';
export type KafkaConsumerDependencies = KafkaDependencies & Pick<QueueConsumerDependencies, 'transactionObservabilityManager'>;
export type KafkaBatchProcessingOptions<BatchProcessingEnabled> = BatchProcessingEnabled extends true ? {
    batchProcessingEnabled: true;
    batchProcessingOptions: KafkaMessageBatchOptions;
} : {
    batchProcessingEnabled: false;
    batchProcessingOptions?: never;
};
export type KafkaConsumerOptions<TopicsConfig extends TopicConfig[], ExecutionContext, BatchProcessingEnabled extends boolean> = BaseKafkaOptions & Omit<ConsumerOptions<string, object, string, string>, 'deserializers' | 'autocommit' | keyof KafkaConfig> & Omit<ConsumeOptions<string, object, string, string>, 'topics'> & KafkaBatchProcessingOptions<BatchProcessingEnabled> & {
    handlers: KafkaHandlerRouting<TopicsConfig, ExecutionContext, BatchProcessingEnabled>;
};
export declare abstract class AbstractKafkaConsumer<TopicsConfig extends TopicConfig[], ExecutionContext, BatchProcessingEnabled extends boolean = false> extends AbstractKafkaService<TopicsConfig, KafkaConsumerOptions<TopicsConfig, ExecutionContext, BatchProcessingEnabled>> {
    private consumer?;
    private consumerStream?;
    private messageBatchStream?;
    private isReconnecting;
    private readonly transactionObservabilityManager;
    private readonly executionContext;
    constructor(dependencies: KafkaConsumerDependencies, options: KafkaConsumerOptions<TopicsConfig, ExecutionContext, BatchProcessingEnabled>, executionContext: ExecutionContext);
    /**
     * Returns `true` if all client connections are currently active and the client is connected to at least one broker.
     * During a reconnect attempt, returns `true` until all reconnect attempts are exhausted.
     */
    get isConnected(): boolean;
    /**
     * Returns `true` if the consumer is not closed and is an active member of a consumer group.
     * Returns `false` during consumer group rebalancing.
     * During a reconnect attempt, returns `true` until all reconnect attempts are exhausted.
     */
    get isActive(): boolean;
    init(): Promise<void>;
    private handleStream;
    close(): Promise<void>;
    private reconnect;
    private consume;
    private parseMessages;
    private tryToConsumeWithRetries;
    private tryToConsume;
    private handleMessagesProcessed;
    private commit;
    private handleResponseErrorOnCommit;
    private buildTransactionName;
    private getRequestContext;
}
