import { Box } from '@expofp/geometry';
import { ImageDef } from '@expofp/renderer';
import { RawPoiType, RawRegularBooth } from '@expofp/schema';
import { PathInfo, ShapeBgDef } from '../types/drawing.types';
import { EventItem } from './EventStore';
import { Exhibitor } from './ExhibitorStore';
import { Layer } from './LayerStore';
import RootStore from './RootStore';
export default class BoothStore {
    readonly rootStore: RootStore;
    booths: Booth[];
    highlightedByExternalIds: never[];
    get boothById(): Map<number, Booth>;
    get boothByExternalId(): Map<string, Booth>;
    get boothByName(): Map<string, Booth>;
    get boothBySlug(): Map<string, Booth>;
    get borderWidth(): number;
    constructor(rootStore: RootStore);
    get bookmarked(): Booth[];
    getNearestBooth(point: Point): Booth;
    getBoothAtPoint(point: Point): Booth;
    findBooth(str: string): Booth | undefined;
    replaceBookmarked(ids: number[]): void;
}
export declare abstract class BoothBase {
    protected readonly store: BoothStore;
    readonly id: number;
    readonly name: string;
    readonly externalId: string;
    readonly title: string;
    /**
     * Unrotated, axis-aligned footprint of the booth (a geometry {@link Box}).
     * The booth's orientation is stored SEPARATELY in {@link rotate}; the two are
     * intentionally kept apart. The dominant access pattern is the unrotated
     * footprint (center, width/height, bounds-union, axis-aligned hit-test), so
     * `rect` stays an AABB and the rotation is only combined with it at the few
     * rotation-sensitive render/geometry sites (a rotated `Rect` is built there
     * from `rect` + `rotate` on demand).
     */
    readonly rect: Box;
    readonly borderWidth: number;
    readonly borderColor: string;
    noLabels: boolean;
    /** Booth orientation in radians, positive = clockwise. Applied to {@link rect}
     *  only at the rotation-sensitive render/geometry sites; the footprint
     *  itself ({@link rect}) is axis-aligned and never carries this rotation. */
    readonly rotate: number;
    readonly paths: PathInfo[];
    readonly pathsWithRect: boolean;
    readonly slug: string;
    readonly error: boolean;
    readonly description: string;
    readonly exhibitors: Exhibitor[];
    readonly labelColor: string;
    readonly schedule: EventItem[];
    readonly poiTypeId: number;
    readonly poiType: RawPoiType;
    readonly poiIcon: string;
    readonly meta: Record<string, string>;
    layer: Layer;
    bookmarkedDirectly: boolean;
    get bookmarked(): boolean;
    private get uiState();
    get fullName(): string;
    get visible(): boolean;
    get hover(): boolean;
    get selected(): boolean;
    get skipDim(): boolean;
}
export type Booth = RegularBooth | SpecialBooth;
export declare class RegularBooth extends BoothBase implements Omit<RawRegularBooth, 'exhibitors'> {
    readonly buyUrl: string;
    readonly reserveUrl: string;
    readonly type: string;
    readonly status: 'onhold' | 'reserved';
    readonly price: string;
    readonly entity: Entity;
    readonly size: string;
    readonly availColor: string;
    readonly soldColor: string;
    readonly holdColor: string;
    readonly onHold: boolean;
    readonly reserved: boolean;
    shapes: (ShapeBgDef | ImageDef)[];
}
export declare class SpecialBooth extends BoothBase {
    readonly color: string;
    shapes: (ShapeBgDef | ImageDef)[];
    readonly entity: Entity;
}
//# sourceMappingURL=BoothStore.d.ts.map