import type { MessageTransaction } from "bmap-api-types";
import type { BroadcastResult, FeedConfig, FeedResponse, Reaction, SocialError, SocialFriend, SocialNotification, UserSearchResult } from "./social.js";
export interface PostMutationData {
    content: string;
    contentType?: "text/plain" | "text/markdown";
    app?: string;
}
export interface ReplyMutationData extends PostMutationData {
    parentTxid: string;
}
export interface UseSocialPostResult {
    mutate: (variables: PostMutationData) => void;
    mutateAsync: (variables: PostMutationData) => Promise<BroadcastResult>;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    data: BroadcastResult | undefined;
    reset: () => void;
}
export interface UseReplyPostResult {
    mutate: (variables: ReplyMutationData) => void;
    mutateAsync: (variables: ReplyMutationData) => Promise<BroadcastResult>;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    data: BroadcastResult | undefined;
    reset: () => void;
}
export interface LikeMutationData {
    txid: string;
    emoji?: string;
}
export interface UseLikePostResult {
    mutate: (variables: LikeMutationData) => void;
    mutateAsync: (variables: LikeMutationData) => Promise<BroadcastResult>;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    data: BroadcastResult | undefined;
    reset: () => void;
}
export interface UseUnlikePostResult {
    mutate: (variables: LikeMutationData) => void;
    mutateAsync: (variables: LikeMutationData) => Promise<BroadcastResult>;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    data: BroadcastResult | undefined;
    reset: () => void;
}
export interface FollowMutationData {
    idKey: string;
}
export interface UseFollowUserResult {
    mutate: (variables: FollowMutationData) => void;
    mutateAsync: (variables: FollowMutationData) => Promise<BroadcastResult>;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    data: BroadcastResult | undefined;
    reset: () => void;
}
export interface UseUnfollowUserResult {
    mutate: (variables: FollowMutationData) => void;
    mutateAsync: (variables: FollowMutationData) => Promise<BroadcastResult>;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    data: BroadcastResult | undefined;
    reset: () => void;
}
export interface MessageMutationData {
    recipient: string;
    content: string;
    encrypted?: boolean;
    channel?: string;
}
export interface UseSendMessageResult {
    mutate: (variables: MessageMutationData) => void;
    mutateAsync: (variables: MessageMutationData) => Promise<BroadcastResult>;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    data: BroadcastResult | undefined;
    reset: () => void;
}
export interface FriendRequestMutationData {
    idKey: string;
}
export interface UseFriendRequestResult {
    mutate: (variables: FriendRequestMutationData) => void;
    mutateAsync: (variables: FriendRequestMutationData) => Promise<BroadcastResult>;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    data: BroadcastResult | undefined;
    reset: () => void;
}
export interface UseAcceptFriendResult {
    mutate: (variables: FriendRequestMutationData) => void;
    mutateAsync: (variables: FriendRequestMutationData) => Promise<BroadcastResult>;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    data: BroadcastResult | undefined;
    reset: () => void;
}
export interface UseUnfriendResult {
    mutate: (variables: FriendRequestMutationData) => void;
    mutateAsync: (variables: FriendRequestMutationData) => Promise<BroadcastResult>;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    data: BroadcastResult | undefined;
    reset: () => void;
}
export interface FeedQueryData {
    config: FeedConfig;
}
export interface UseSocialFeedResult {
    data: {
        pages: FeedResponse[];
        pageParams: unknown[];
    } | undefined;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    fetchNextPage: () => void;
    hasNextPage: boolean;
    isFetchingNextPage: boolean;
}
export interface UserSearchQueryData {
    query: string;
    limit?: number;
}
export interface UseBapIdSearchResult {
    data: UserSearchResult | undefined;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    refetch: () => void;
}
export interface ReactionsQueryData {
    txid: string;
}
export interface UseReactionsResult {
    data: Reaction[] | undefined;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    refetch: () => void;
}
export interface NotificationsQueryData {
    idKey: string;
    unreadOnly?: boolean;
}
export interface UseNotificationsResult {
    data: SocialNotification[] | undefined;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    refetch: () => void;
}
export interface FriendsQueryData {
    idKey: string;
}
export interface UseFriendsResult {
    data: SocialFriend[] | undefined;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    refetch: () => void;
}
export interface MessagesQueryData {
    channel?: string;
    recipient?: string;
    limit?: number;
}
export interface UseMessagesResult {
    data: {
        pages: MessageTransaction[][];
        pageParams: unknown[];
    } | undefined;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: SocialError | null;
    fetchNextPage: () => void;
    hasNextPage: boolean;
    isFetchingNextPage: boolean;
}
export interface SocialHookConfig {
    apiUrl?: string;
    broadcaster?: string;
    retryCount?: number;
    cacheTime?: number;
    staleTime?: number;
}
export interface OptimisticLike {
    txid: string;
    emoji: string;
    added: boolean;
    timestamp: number;
}
export interface OptimisticFollow {
    idKey: string;
    following: boolean;
    timestamp: number;
}
export interface OptimisticPost {
    tempId: string;
    content: string;
    contentType: "text/plain" | "text/markdown";
    timestamp: number;
}
export interface MutationHelpers<TData, TError, TVariables> {
    mutate: (variables: TVariables) => void;
    mutateAsync: (variables: TVariables) => Promise<TData>;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: TError | null;
    data: TData | undefined;
    reset: () => void;
}
export interface QueryHelpers<TData, TError> {
    data: TData | undefined;
    isLoading: boolean;
    isError: boolean;
    isSuccess: boolean;
    error: TError | null;
    refetch: () => Promise<TData>;
    isFetching: boolean;
}
export interface InfiniteQueryHelpers<TData, TError> extends QueryHelpers<TData, TError> {
    fetchNextPage: () => Promise<TData>;
    fetchPreviousPage: () => Promise<TData>;
    hasNextPage: boolean;
    hasPreviousPage: boolean;
    isFetchingNextPage: boolean;
    isFetchingPreviousPage: boolean;
}
//# sourceMappingURL=hooks.d.ts.map