import { StateStore } from './store';
import type { StreamChat } from './client';
import type { Event, PartialPollUpdate, PollAnswer, PollData, PollEnrichData, PollOptionData, PollResponse, PollVote, QueryVotesFilters, QueryVotesOptions, VoteSort } from './types';
export declare const isVoteAnswer: (vote: PollVote | PollAnswer) => vote is PollAnswer;
export type PollAnswersQueryParams = {
    filter?: QueryVotesFilters;
    options?: QueryVotesOptions;
    sort?: VoteSort;
};
export type PollOptionVotesQueryParams = {
    filter: {
        option_id: string;
    } & QueryVotesFilters;
    options?: QueryVotesOptions;
    sort?: VoteSort;
};
type OptionId = string;
export type PollState = Omit<PollResponse, 'own_votes' | 'id'> & {
    lastActivityAt: Date;
    maxVotedOptionIds: OptionId[];
    ownVotesByOptionId: Record<OptionId, PollVote>;
    ownAnswer?: PollAnswer;
};
type PollInitOptions = {
    client: StreamChat;
    poll: PollResponse;
};
export declare class Poll {
    readonly state: StateStore<PollState>;
    id: string;
    private client;
    constructor({ client, poll }: PollInitOptions);
    private getInitialStateFromPollResponse;
    private upsertOfflineDb;
    reinitializeState: (poll: PollInitOptions["poll"]) => void;
    get data(): PollState;
    handlePollUpdated: (event: Event) => void;
    handlePollClosed: (event: Event) => void;
    handleVoteCasted: (event: Event) => void;
    handleVoteChanged: (event: Event) => void;
    handleVoteRemoved: (event: Event) => void;
    query: (id: string) => Promise<PollResponse>;
    update: (data: Exclude<PollData, "id">) => Promise<import("./types").APIResponse & import("./types").UpdatePollAPIResponse>;
    partialUpdate: (partialPollObject: PartialPollUpdate) => Promise<import("./types").APIResponse & import("./types").UpdatePollAPIResponse>;
    close: () => Promise<import("./types").APIResponse & import("./types").UpdatePollAPIResponse>;
    delete: () => Promise<import("./types").APIResponse>;
    createOption: (option: PollOptionData) => Promise<import("./types").APIResponse & import("./types").CreatePollOptionAPIResponse>;
    updateOption: (option: PollOptionData) => Promise<import("./types").APIResponse & import("./types").CreatePollOptionAPIResponse>;
    deleteOption: (optionId: string) => Promise<import("./types").APIResponse>;
    castVote: (optionId: string, messageId: string) => Promise<(import("./types").APIResponse & import("./types").CastVoteAPIResponse) | undefined>;
    removeVote: (voteId: string, messageId: string) => Promise<import("./types").APIResponse & {
        vote: PollVote;
    }>;
    addAnswer: (answerText: string, messageId: string) => Promise<import("./types").APIResponse & import("./types").CastVoteAPIResponse>;
    removeAnswer: (answerId: string, messageId: string) => Promise<import("./types").APIResponse & {
        vote: PollVote;
    }>;
    queryAnswers: (params: PollAnswersQueryParams) => Promise<import("./types").APIResponse & import("./types").PollAnswersAPIResponse>;
    queryOptionVotes: (params: PollOptionVotesQueryParams) => Promise<import("./types").APIResponse & import("./types").PollVotesAPIResponse>;
}
export declare function extractPollData(pollResponse: PollResponse): PollData;
export declare function mapPollStateToResponse(poll: Poll): PollResponse;
export declare function extractPollEnrichedData(pollResponse: PollResponse): Omit<PollEnrichData, 'own_votes' | 'latest_answers'>;
export {};
