import { MatrixClient } from "../client";
import { PollStartEvent } from "../extensible_events_v1/PollStartEvent";
import { MatrixEvent } from "./event";
import { Relations } from "./relations";
import { Room } from "./room";
import { TypedEventEmitter } from "./typed-event-emitter";
export declare enum PollEvent {
    New = "Poll.new",
    End = "Poll.end",
    Update = "Poll.update",
    Responses = "Poll.Responses",
    Destroy = "Poll.Destroy"
}
export type PollEventHandlerMap = {
    [PollEvent.Update]: (event: MatrixEvent, poll: Poll) => void;
    [PollEvent.Destroy]: (pollIdentifier: string) => void;
    [PollEvent.End]: () => void;
    [PollEvent.Responses]: (responses: Relations) => void;
};
export declare class Poll extends TypedEventEmitter<Exclude<PollEvent, PollEvent.New>, PollEventHandlerMap> {
    readonly rootEvent: MatrixEvent;
    private matrixClient;
    private room;
    readonly roomId: string;
    readonly pollEvent: PollStartEvent;
    private _isFetchingResponses;
    private relationsNextBatch;
    private responses;
    private endEvent;
    constructor(rootEvent: MatrixEvent, matrixClient: MatrixClient, room: Room);
    get pollId(): string;
    get isEnded(): boolean;
    get isFetchingResponses(): boolean;
    getResponses(): Promise<Relations>;
    /**
     *
     * @param event - event with a relation to the rootEvent
     * @returns void
     */
    onNewRelation(event: MatrixEvent): void;
    private fetchResponses;
    /**
     * Only responses made before the poll ended are valid
     * Refilter after an end event is recieved
     * To ensure responses are valid
     */
    private refilterResponsesOnEnd;
    private validateEndEvent;
}
//# sourceMappingURL=poll.d.ts.map