import { Happening, HappeningData, HappeningTree } from "./types";
import { Attendee } from "../attendee";
import { Partner } from "../partner";
import { Organisation } from "../organisation";
export interface HappeningTreeConfig {
    getHappeningTree?<T extends HappeningData = Happening, K extends keyof T = keyof T>(happeningId: string, context: GetHappeningTreeContext<T, K>): Promise<HappeningTree | undefined>;
}
export interface GetHappeningTreeContext<T extends HappeningData = Happening, K extends keyof T = keyof T> {
    trees: Map<string, HappeningTree>;
    store?: Map<string, T>;
    attendees: Map<string, Attendee>;
    partners: Map<string, Partner>;
    organisations: Map<string, Organisation>;
    idKey: K;
    get?(key: string): Promise<T | undefined>;
}
export interface CreateGetHappeningTreeContextOptions<T extends HappeningData = Happening, K extends keyof T = keyof T> {
    idKey?: K;
    happenings?: T[];
    attendees?: Attendee[];
    organisations?: Organisation[];
    partners?: Partner[];
    get?(key: string): Promise<T | undefined>;
}
export declare function createGetHappeningTreeContext<T extends HappeningData = Happening, K extends keyof T = keyof T>(options?: CreateGetHappeningTreeContextOptions<T, K>): GetHappeningTreeContext<T, K>;
export declare function getTopHappeningTree(happeningId: string): Promise<HappeningTree>;
export declare function getHappeningTree<T extends HappeningData = Happening, K extends keyof T = keyof T>(happeningId: string, context?: GetHappeningTreeContext<T, K>): Promise<HappeningTree>;
