import type { User } from '@sendbird/chat';
import { FailedMessageHandler, MessageHandler, UserMessage, UserMessageCreateParams } from '@sendbird/chat/message';
import { GroupChannel, GroupChannelCreateParams } from '@sendbird/chat/groupChannel';
import { OpenChannel, OpenChannelCreateParams } from '@sendbird/chat/openChannel';
import { FileMessage, FileMessageCreateParams, SendableMessage, UserMessageUpdateParams } from '@sendbird/chat/lib/__definition';
import { SendbirdState } from './Sendbird/types';
import { SendableMessageType } from '../utils';
import { PublishingModuleType } from '../modules/internalInterfaces';
/**
 * 1. UIKit Instances
 *    a. getSdk
 *    b. getPubSub
 * 2. Chat & Connection
 *    a. getConnect
 *    b. getDisconnect
 *    c. getUpdateUserInfo
 * 3. Channel
 *    a. getCreateGroupChannel
 *    b. getCreateOpenChannel
 *    c. getGetGroupChannel
 *    d. getGetOpenChannel
 *    e. getLeaveGroupChannel
 *    f. getEnterOpenChannel
 *    g. getExitOpenChannel
 *    h. getFreezeChannel
 *    i. getUnfreezeChannel
 * 4. Message
 *    a. getSendUserMessage
 *    b. getSendFileMessage
 *    c. getUpdateUserMessage
 *    d. x - getUpdateFileMessage
 *    e. getDeleteMessage
 *    f. getResendUserMessage
 *    g. getResendFileMessage
 */
/**
 * import useSendbirdStateContext from '@sendbird-uikit/useSendbirdStateContext'
 * import selectors from '@sendbird-uikit/send'
 * const state = useSendbirdStateContext();
 */
/**
 * const sdk = selectors.getSdk(state);
 */
export declare const getSdk: (state: SendbirdState) => import("@sendbird/chat").default & import("@sendbird/chat/lib/__definition").ModuleNamespaces<[import("@sendbird/chat/groupChannel").GroupChannelModule, import("@sendbird/chat/openChannel").OpenChannelModule]>;
/**
 * const pubSub = selectors.getPubSub(state);
 */
export declare const getPubSub: (state: SendbirdState) => import("./pubSub/topics").SBUGlobalPubSub;
/**
 * const connect = selectors.getConnect(state);
 * connect('user-id-sendbirdian', 'access-token-0000')
 *  .then((user) => {})
 *  .catch((error) => {})
 */
export declare const getConnect: (state: SendbirdState) => (userId: string, accessToken?: string) => Promise<User>;
/**
 * const disconnect = selectors.getDisconnect(state);
 * disconnect()
 *  .then(() => {})
 *  .catch((error) => {})
 */
export declare const getDisconnect: (state: SendbirdState) => () => Promise<void>;
/**
 * const updateUserInfo = selectors.getUpdateUserInfo(state);
 * updateUserInfo('new-nickname', 'new-profile-url')
 *  .then((user) => {})
 *  .catch((error) => {})
 */
export declare const getUpdateUserInfo: (state: SendbirdState) => (nickname: string, profileUrl?: string) => Promise<User>;
/**
 * const createGroupChannel = selectors.getCreateGroupChannel(state);
 * createGroupChannel(channelParams: GroupChannelCreateParams)
 *  .then((channel) => {})
 *  .catch((error) => {})
 */
export declare const getCreateGroupChannel: (state: SendbirdState) => (params: GroupChannelCreateParams) => Promise<GroupChannel>;
/**
 * const createOpenChannel = selectors.getCreateOpenChannel(state);
 * createOpenChannel(channelParams: OpenChannelCreateParams)
 *  .then((channel) => {})
 *  .catch((error) => {})
 */
export declare const getCreateOpenChannel: (state: SendbirdState) => (params: OpenChannelCreateParams) => Promise<OpenChannel>;
/**
 * const getGroupChannel = selectors.getGetGroupChannel(state);
 * getGroupChannel('channel-url-1234', isSelected)
 *  .then((channel) => {
 *    // groupChannel = channel;
 *    // or
 *    // setCurrentChannel(channel);
 *  })
 *  .catch((error) => {})
 */
export declare const getGetGroupChannel: (state: SendbirdState) => (channelUrl: string) => Promise<GroupChannel>;
/**
 * const getOpenChannel = selectors.getGetOpenChannel(state);
 * getOpenChannel('channel-url-12345')
 *  .then((channel) => {
 *    // openChannel = channel;
 *    // or
 *    // setCurrentChannel(channel);
 *  })
 *  .catch((error) => {})
 */
export declare const getGetOpenChannel: (state: SendbirdState) => (channelUrl: string) => Promise<OpenChannel>;
/**
 * const leaveChannel = selectors.getLeaveGroupChannel(state);
 * leaveChannel('group-channel-url')
 *  .then((channel) => {})
 *  .catch((error) => {})
 */
export declare const getLeaveGroupChannel: (state: SendbirdState) => (channelUrl: string) => Promise<void>;
/**
 * const enterChannel = selectors.getEnterOpenChannel(state);
 * enterChannel('open-channel-url')
 *  .then((channel) => {})
 *  .catch((error) => {})
 */
export declare const getEnterOpenChannel: (state: SendbirdState) => (channelUrl: string) => Promise<OpenChannel>;
/**
 * const exitChannel = selectors.getExitOpenChannel(state);
 * exitChannel('open-channel-url')
 *  .then((channel) => {})
 *  .catch((error) => {})
 */
export declare const getExitOpenChannel: (state: SendbirdState) => (channelUrl: string) => Promise<OpenChannel>;
/**
 * const freezeChannel = selectors.getFreezeChannel(currentChannel);
 * freezeChannel()
 *  .then(() => {})
 *  .catch((error) => {})
 */
export declare const getFreezeChannel: () => (channel: GroupChannel | OpenChannel) => Promise<void>;
/**
 * const unfreezeChannel = selectors.getUnfreezeChannel(currentChannel);
 * unfreezeChannel()
 *  .then((channel) => {})
 *  .catch((error) => {})
 */
export declare const getUnfreezeChannel: () => (channel: GroupChannel | OpenChannel) => Promise<void>;
export declare class UikitMessageHandler<T extends SendableMessage = SendableMessage> {
    private _onPending;
    private _onFailed;
    private _onSucceeded;
    triggerPending(message: T): void;
    triggerFailed(error: Error, message: T | null): void;
    triggerSucceeded(message: T): void;
    onPending(handler: MessageHandler<T>): UikitMessageHandler<T>;
    onFailed(handler: FailedMessageHandler<T>): UikitMessageHandler<T>;
    onSucceeded(handler: MessageHandler<T>): UikitMessageHandler<T>;
}
/**
 * const sendUserMessage = selectors.getSendUserMessage(state);
 * sendUserMessage(
 *  channel: GroupChannel | OpenChannel,
 *  params: UserMessageCreateParams,
 * )
 *  .onPending((message) => {})
 *  .onFailed((error, message) => {})
 *  .onSucceeded((message) => {})
 */
export declare const getSendUserMessage: (state: SendbirdState, publishingModules?: PublishingModuleType[]) => (channel: GroupChannel | OpenChannel, params: UserMessageCreateParams) => UikitMessageHandler;
/**
 * const sendFileMessage = selectors.getSendFileMessage(state);
 * sendFileMessage(
 *  channel: GroupChannel | OpenChannel,
 *  params: FileMessageCreateParams,
 * )
 *  .onPending((message) => {})
 *  .onFailed((error, message) => {})
 *  .onSucceeded((message) => {})
 */
export declare const getSendFileMessage: (state: SendbirdState, publishingModules?: PublishingModuleType[]) => (channel: GroupChannel | OpenChannel, params: FileMessageCreateParams) => UikitMessageHandler;
/**
 * const updateUserMessage = selectors.getUpdateUserMessage(state);
 * updateUserMessage(
 *  channel: GroupChannel | OpenChannel,
 *  messageId: number,
 *  messageParams: UserMessageUpdateParams,
 * )
 *  .then((message) => {})
 *  .catch((error) => {})
 */
export declare const getUpdateUserMessage: (state: SendbirdState, publishingModules?: PublishingModuleType[]) => (channel: GroupChannel | OpenChannel, messageId: number, params: UserMessageUpdateParams) => Promise<UserMessage>;
/**
 * const updateFileMessage = selectors.getUpdateFileMessage(state);
 * updateFileMessage(
 *  channel: GroupChannel | OpenChannel,
 *  messageId: number,
 *  params: FileMessageUpdateParams,
 * )
 *  .then((message) => {})
 *  .catch((error) => {})
 */
/**
 * const deleteMessage = selectors.getDeleteMessage(state);
 * deleteMessage(
 *  channel: GroupChannel | OpenChannel,
 *  message: SendableMessage,
 * )
 *  .then((deletedMessage) => {})
 *  .catch((error) => {})
 */
export declare const getDeleteMessage: (state: SendbirdState) => (channel: GroupChannel | OpenChannel, message: SendableMessageType) => Promise<SendableMessageType>;
/**
 * const resendUserMessage = selectors.getResendUserMessage(state);
 * resendUserMessage(
 *  channel: GroupChannel | OpenChannel,
 *  failedMessage: UserMessage,
 * )
 *  .then(() => {})
 *  .catch((error) => {})
 */
export declare const getResendUserMessage: (state: SendbirdState, publishingModules?: PublishingModuleType[]) => (channel: GroupChannel | OpenChannel, failedMessage: UserMessage) => Promise<UserMessage>;
/**
 * const resendFileMessage = selectors.getResendFileMessage(state);
 * resendFileMessage(
 *  channel: GroupChannel | OpenChannel,
 *  failedMessage: FileMessage,
 *  blob: Blob,
 * )
 *  .then(() => {})
 *  .catch((error) => {})
 */
export declare const getResendFileMessage: (state: SendbirdState, publishingModules?: PublishingModuleType[]) => (channel: GroupChannel | OpenChannel, failedMessage: FileMessage, blob: Blob) => Promise<FileMessage>;
declare const sendbirdSelectors: {
    getSdk: (state: SendbirdState) => import("@sendbird/chat").default & import("@sendbird/chat/lib/__definition").ModuleNamespaces<[import("@sendbird/chat/groupChannel").GroupChannelModule, import("@sendbird/chat/openChannel").OpenChannelModule]>;
    getPubSub: (state: SendbirdState) => import("./pubSub/topics").SBUGlobalPubSub;
    getConnect: (state: SendbirdState) => (userId: string, accessToken?: string) => Promise<User>;
    getDisconnect: (state: SendbirdState) => () => Promise<void>;
    getUpdateUserInfo: (state: SendbirdState) => (nickname: string, profileUrl?: string) => Promise<User>;
    getCreateGroupChannel: (state: SendbirdState) => (params: GroupChannelCreateParams) => Promise<GroupChannel>;
    getCreateOpenChannel: (state: SendbirdState) => (params: OpenChannelCreateParams) => Promise<OpenChannel>;
    getGetGroupChannel: (state: SendbirdState) => (channelUrl: string) => Promise<GroupChannel>;
    getGetOpenChannel: (state: SendbirdState) => (channelUrl: string) => Promise<OpenChannel>;
    getLeaveGroupChannel: (state: SendbirdState) => (channelUrl: string) => Promise<void>;
    getEnterOpenChannel: (state: SendbirdState) => (channelUrl: string) => Promise<OpenChannel>;
    getExitOpenChannel: (state: SendbirdState) => (channelUrl: string) => Promise<OpenChannel>;
    getFreezeChannel: () => (channel: GroupChannel | OpenChannel) => Promise<void>;
    getUnfreezeChannel: () => (channel: GroupChannel | OpenChannel) => Promise<void>;
    getSendUserMessage: (state: SendbirdState, publishingModules?: PublishingModuleType[]) => (channel: GroupChannel | OpenChannel, params: UserMessageCreateParams) => UikitMessageHandler;
    getSendFileMessage: (state: SendbirdState, publishingModules?: PublishingModuleType[]) => (channel: GroupChannel | OpenChannel, params: FileMessageCreateParams) => UikitMessageHandler;
    getUpdateUserMessage: (state: SendbirdState, publishingModules?: PublishingModuleType[]) => (channel: GroupChannel | OpenChannel, messageId: number, params: UserMessageUpdateParams) => Promise<UserMessage>;
    getDeleteMessage: (state: SendbirdState) => (channel: GroupChannel | OpenChannel, message: SendableMessageType) => Promise<SendableMessageType>;
    getResendUserMessage: (state: SendbirdState, publishingModules?: PublishingModuleType[]) => (channel: GroupChannel | OpenChannel, failedMessage: UserMessage) => Promise<UserMessage>;
    getResendFileMessage: (state: SendbirdState, publishingModules?: PublishingModuleType[]) => (channel: GroupChannel | OpenChannel, failedMessage: FileMessage, blob: Blob) => Promise<FileMessage>;
};
export default sendbirdSelectors;
