import { AnsiLogger } from 'matterbridge/logger';
import { ServiceArea } from 'matterbridge/matter/clusters';
import { MapInfo, RoomIndexMap } from '../core/application/models/index.js';
import { type SupportedAreasResult } from '../initialData/getSupportedAreas.js';
import { RoborockIoTApi } from '../roborockCommunication/api/iotClient.js';
import { RawRoomMappingData, RoomDto } from '../roborockCommunication/models/home/index.js';
import { Scene } from '../roborockCommunication/models/index.js';
import { MessageRoutingService } from './index.js';
/** Manages cleaning areas, rooms, maps, and scenes. */
export declare class AreaManagementService {
    private readonly logger;
    private readonly serviceRouting;
    private readonly liveMapUpdates;
    private readonly enableMultipleMap;
    private supportedAreas;
    private supportedMaps;
    private supportedRoutines;
    private selectedAreas;
    private progress;
    private lastActivelyCleaningState;
    private supportedAreaIndexMaps;
    private areasListeners;
    private refreshIntervals;
    private deviceRooms;
    private iotApi;
    private mapInfoCache;
    private v1RoomResolutionCache;
    constructor(logger: AnsiLogger, serviceRouting: MessageRoutingService | undefined, liveMapUpdates?: boolean, enableMultipleMap?: boolean);
    private getPrimaryMapId;
    isMultipleMapEnabled(): boolean;
    setIotApi(iotApi: RoborockIoTApi): void;
    setDeviceRooms(duid: string, rooms: RoomDto[]): void;
    setSelectedAreas(duid: string, selectedAreas: number[]): void;
    getSelectedAreas(duid: string): number[];
    setProgress(duid: string, progress: ServiceArea.Progress[]): void;
    getProgress(duid: string): ServiceArea.Progress[];
    /** Store the "was actively cleaning" state for a device. */
    setLastActivelyCleaningState(duid: string, isActivelyCleaning: boolean): void;
    /** Retrieve the stored "was actively cleaning" state for a device. */
    getLastActivelyCleaningState(duid: string): boolean;
    registerAreasListener(duid: string, callback: (areas: ServiceArea.Area[], maps: ServiceArea.Map[]) => void): void;
    setSupportedMaps(duid: string, maps: ServiceArea.Map[]): void;
    getSupportedMaps(duid: string): ServiceArea.Map[];
    setSupportedAreas(duid: string, supportedAreas: ServiceArea.Area[]): void;
    setSupportedAreaIndexMap(duid: string, indexMap: RoomIndexMap): void;
    setSupportedRoutines(duid: string, routineAsRooms: ServiceArea.Area[]): void;
    getSupportedAreas(duid: string): ServiceArea.Area[];
    getSupportedAreasIndexMap(duid: string): RoomIndexMap | undefined;
    mergeSupportedAreasForMap(duid: string, mapId: number, incomingAreas: ServiceArea.Area[], incomingIndexMap: RoomIndexMap): void;
    getSupportedRoutines(duid: string): ServiceArea.Area[] | undefined;
    private fetchAndApplyMapInfo;
    private applyAreasResult;
    /** Publish areas/maps from a computed {@link SupportedAreasResult} (live push path). */
    applySupportedAreasResult(duid: string, result: SupportedAreasResult, mergeMapId?: number): void;
    private isPhysicalMapId;
    private hasAreasForMap;
    private applyRoomMapData;
    private fetchAndApplyRoomMap;
    ensureAreasForMap(duid: string, mapId: number, options?: {
        switchFirst?: boolean;
    }): Promise<boolean>;
    getMapInfo(duid: string): Promise<MapInfo | undefined>;
    getRoomMap(duid: string, activeMap: number): Promise<RawRoomMappingData | undefined>;
    resolveInitialAreas(duid: string): Promise<{
        supportedAreas: ServiceArea.Area[];
        supportedMaps: ServiceArea.Map[];
    }>;
    private sortSupportedAreasByMap;
    startPeriodicRefresh(duid: string, intervalMs?: number): void;
    stopPeriodicRefresh(duid: string): void;
    getScenes(homeId: number): Promise<Scene[] | undefined>;
    startScene(sceneId: number): Promise<unknown>;
    setV1ResolvedSegment(duid: string, segmentId: number): void;
    getV1ResolvedSegment(duid: string, maxAgeMs?: number): number | undefined;
    requestV1MapRefresh(duid: string): Promise<void>;
    /** Clear all area management data and stop all refresh timers. */
    clearAll(): void;
}
//# sourceMappingURL=areaManagementService.d.ts.map