import { AnsiLogger } from 'matterbridge/logger';
import { ServiceArea } from 'matterbridge/matter/clusters';
import { LocalStorage } from 'node-persist';
import { CleanModeSetting } from '../behaviors/roborock.vacuum/core/CleanModeSetting.js';
import { MapInfo, RoomIndexMap } from '../core/application/models/index.js';
import { AuthenticationResponse } from '../model/AuthenticationResponse.js';
import { PlatformConfigManager } from '../platform/platformConfigManager.js';
import { RoborockAuthenticateApi } from '../roborockCommunication/api/authClient.js';
import { RoborockIoTApi } from '../roborockCommunication/api/iotClient.js';
import { Device, Home, RawRoomMappingData, RequestMessage, Scene, UserData } from '../roborockCommunication/models/index.js';
import { ServiceContainer } from '../services/index.js';
import { DeviceNotifyCallback, Factory } from '../types/index.js';
import { WssSendSnackbarMessage } from '../types/WssSendSnackbarMessage.js';
export interface RoborockServiceConfig {
    authenticateApiFactory?: (logger: AnsiLogger, baseUrl: string) => RoborockAuthenticateApi;
    iotApiFactory?: Factory<UserData, RoborockIoTApi>;
    refreshInterval: number;
    baseUrl: string;
    persist: LocalStorage;
    configManager: PlatformConfigManager;
    container?: ServiceContainer;
    toastMessage: WssSendSnackbarMessage;
}
/** Facade coordinating Auth, Device, Area, and Message services via ServiceContainer. */
export declare class RoborockService {
    private logger;
    private configManager;
    private readonly container;
    private readonly authCoordinator;
    private readonly deviceService;
    private readonly areaService;
    private readonly messageRoutingService;
    private readonly pollingService;
    private readonly connectionService;
    private readonly toastMessage;
    deviceNotify: DeviceNotifyCallback | undefined;
    constructor(params: RoborockServiceConfig, logger: AnsiLogger, configManager: PlatformConfigManager);
    authenticate(): Promise<AuthenticationResponse>;
    /** List all devices for the user's account. */
    listDevices(): Promise<Device[]>;
    getSerialNumber(duid: string): Promise<string>;
    /** Get home data for periodic updates. */
    getHomeDataForUpdating(homeid: number): Promise<Home | undefined>;
    /** Initialize MQTT client for cloud communication. */
    initializeMessageClient(device: Device, userdata: UserData): Promise<void>;
    /** Initialize local network connection for a device. */
    initializeMessageClientForLocal(device: Device): Promise<boolean>;
    /** Send a test email to verify email notification settings. */
    sendTestEmailNotification(): Promise<void>;
    /** Set callback for device status notifications. */
    setDeviceNotify(callback: DeviceNotifyCallback): void;
    /** Start polling device status via local network. */
    activateDeviceNotify(device: Device): void;
    /** Trigger a one-shot local/MQTT status request for a device. */
    requestDeviceStatusOnce(duid: string): Promise<void>;
    /** Stop service and clean up resources. */
    stopService(): void;
    /** Set selected cleaning areas for a device. */
    setSelectedAreas(duid: string, selectedAreas: number[]): void;
    /** Get selected cleaning areas for a device. */
    getSelectedAreas(duid: string): number[];
    /** Set supported cleaning areas (rooms) for a device. */
    setSupportedAreas(duid: string, supportedAreas: ServiceArea.Area[]): void;
    /** Set area-to-room index mapping for a device. */
    setSupportedAreaIndexMap(duid: string, indexMap: RoomIndexMap): void;
    /** Set supported cleaning routines/scenes for a device. */
    setSupportedRoutines(duid: string, routineAsRooms: ServiceArea.Area[]): void;
    /** Get supported cleaning areas for a device. */
    getSupportedAreas(duid: string): ServiceArea.Area[];
    /** Get area index map for a device. */
    getSupportedAreasIndexMap(duid: string): RoomIndexMap | undefined;
    /** Get map information for a device. */
    getMapInfo(duid: string): Promise<MapInfo>;
    /** Get room mapping for a device. */
    getRoomMap(duid: string, activeMap: number): Promise<RawRoomMappingData>;
    /** Get all scenes for a home. */
    getScenes(homeId: number): Promise<Scene[] | undefined>;
    /** Start a cleaning scene/routine. */
    startScene(sceneId: number): Promise<unknown>;
    /** Get current cleaning mode settings. */
    getCleanModeData(duid: string): Promise<CleanModeSetting>;
    /** Get vacuum's current room from map. */
    getRoomIdFromMap(duid: string): Promise<number | undefined>;
    /** Change cleaning mode settings. */
    changeCleanMode(duid: string, settings: CleanModeSetting): Promise<void>;
    /** Start cleaning with selected areas. */
    startClean(duid: string): Promise<void>;
    /** Pause cleaning. */
    pauseClean(duid: string): Promise<void>;
    /** Stop cleaning and return to dock. */
    stopAndGoHome(duid: string): Promise<void>;
    /** Resume paused cleaning. */
    resumeClean(duid: string): Promise<void>;
    stopClean(duid: string): Promise<void>;
    /** Play sound to locate vacuum. */
    playSoundToLocate(duid: string): Promise<void>;
    /** Execute custom GET request to device. */
    customGet<T = unknown>(duid: string, request: RequestMessage): Promise<T>;
    /** Send custom command to device (fire-and-forget). */
    customSend(duid: string, request: RequestMessage): Promise<void>;
    /** Execute custom API GET request. */
    getCustomAPI<T = unknown>(url: string): Promise<T>;
    private buildCleanCommand;
}
//# sourceMappingURL=roborockService.d.ts.map