import type { MessageStatus, SimpleType } from '../use-x-chat';
import type { AbstractXRequestClass, ManualXRequestOptions } from '../x-request/manual-x-request';
export interface ChatProviderConfig<Input = unknown, Output = unknown, ChatMessage extends SimpleType = SimpleType> {
    /**
     * Base params merged by DefaultChatProvider.transformParams
     * (aligned with @ant-design/x-sdk request options.params).
     */
    params?: Record<string, unknown>;
    /**
     * Optional manual XRequest owned by the provider (SDK-style).
     * When set, useXChat can run without useXAgent.
     */
    request?: AbstractXRequestClass<Input, Output, ChatMessage> | (() => AbstractXRequestClass<Input, Output, ChatMessage>);
}
export interface TransformMessageInfo<ChatMessage extends SimpleType, Output> {
    originMessage?: ChatMessage;
    chunk: Output;
    chunks: Output[];
    status: MessageStatus;
    responseHeaders?: Headers;
}
/**
 * Base chat provider (aligned with @ant-design/x-sdk AbstractChatProvider).
 * Supports transform-only mode or provider-owned manual XRequest.
 */
export declare abstract class AbstractChatProvider<ChatMessage extends SimpleType = SimpleType, Input = unknown, Output = unknown> {
    protected config: ChatProviderConfig<Input, Output, ChatMessage>;
    private _getMessagesFn?;
    private _request?;
    private _originalCallbacks?;
    constructor(config?: ChatProviderConfig<Input, Output, ChatMessage>);
    get request(): AbstractXRequestClass<Input, Output, ChatMessage> | undefined;
    get hasRequest(): boolean;
    /**
     * Merge onRequest params with history / provider defaults before calling the agent/request.
     */
    abstract transformParams(requestParams: Partial<Input>, history?: ChatMessage[], options?: ManualXRequestOptions<Input, Output, ChatMessage>): Input;
    /**
     * Convert onRequest params into the local (user) ChatMessage for rendering.
     */
    abstract transformLocalMessage(requestParams: Partial<Input>): ChatMessage | ChatMessage[];
    /**
     * Convert streaming / final chunks into an assistant ChatMessage.
     */
    abstract transformMessage(info: TransformMessageInfo<ChatMessage, Output>): ChatMessage;
    getMessages(): ChatMessage[];
    injectGetMessages(getMessages: () => ChatMessage[]): void;
    /**
     * Wire useXChat stream handlers into the owned manual request callbacks.
     */
    injectRequest({ onUpdate, onSuccess, onError, }: {
        onUpdate: (data: Output, responseHeaders: Headers) => any;
        onSuccess: (data: Output[], responseHeaders: Headers) => any;
        onError: (error: any, errorInfo?: any) => any;
    }): void;
    /** Ready-to-use transformMessage for useXChat */
    asTransformMessage(): (info: TransformMessageInfo<ChatMessage, Output>) => ChatMessage;
}
export default AbstractChatProvider;
