/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { ServiceArea } from "#clusters/service-area";
import { MaybePromise } from "#general";
declare const ServiceAreaBase: import("../../index.js").ClusterBehavior.Type<import("#types").ClusterComposer.WithFeatures<ServiceArea.Cluster, readonly [ServiceArea.Feature.Maps, ServiceArea.Feature.ProgressReporting]>, import("./ServiceAreaBehavior.js").ServiceAreaBehaviorConstructor, import("./ServiceAreaInterface.js").ServiceAreaInterface>;
type AssertSelectServiceAreaResponse = {
    result: ServiceArea.SelectAreasResponse;
    validatedAreas?: number[];
};
/**
 * This is the default server implementation of {@link ServiceAreaBehavior}.
 *
 * It validates the attributes on initialization and when being changed against the definition of the specification.
 * It configures the estimatedEndTime attribute according to the defined Q-Requirements.
 *
 * The `skipArea` command is not implemented because optional and depending on device specific behavior, but the
 * below defined extension method `assertSkipServiceArea` implements all relevant default validation as defined by specs.
 *
 * This implementation offers the following extension points:
 * * - `assertSelectServiceArea` to implement custom logic when selecting areas
 * * - `assertSkipServiceArea` to implement custom logic when skipping areas
 *
 * Additionally, the `removeSupportedAreasEntry` and `removeSupportedMapsEntry` methods are provided to remove entries
 * including needed adjustments of other attributes.
 */
export declare class ServiceAreaBaseServer extends ServiceAreaBase {
    #private;
    initialize(): MaybePromise;
    /**
     * This command is used to select a set of device areas, where the device is to operate.
     * On receipt of this command the device shall respond with a SelectAreasResponse command.
     *
     * The default implementation wil check the areaId as defined by the specification and internally calls
     * `assertSelectServiceArea`, which can be overridden to implement custom logic.
     * When a new list of areas is selected, the device shall clear the progress list and set the status of all areas to
     * Pending.
     */
    selectAreas({ newAreas }: ServiceArea.SelectAreasRequest): MaybePromise<ServiceArea.SelectAreasResponse>;
    protected assertSelectServiceArea({ newAreas }: ServiceArea.SelectAreasRequest): AssertSelectServiceAreaResponse;
    protected assertSkipServiceArea({ skippedArea }: ServiceArea.SkipAreaRequest): ServiceArea.SkipAreaResponse;
    removeSupportedAreasEntry(areaId: number): void;
    /**
     * Convenience helper method to remove a map from the supported maps list.
     * The logic will also sync the SupportedAreas list with this removal.
     */
    removeSupportedMapsEntry(mapId: number): void;
}
export declare namespace ServiceAreaBaseServer {
    const ExtensionInterface: {
        assertSelectServiceArea({ newAreas }: ServiceArea.SelectAreasRequest): AssertSelectServiceAreaResponse;
        assertSkipServiceArea({ skippedArea }: ServiceArea.SkipAreaRequest): ServiceArea.SkipAreaResponse;
    };
}
declare const ServiceAreaServer_base: import("../../index.js").ClusterBehavior.Type<import("#types").ClusterComposer.WithFeatures<import("#types").ClusterComposer.WithFeatures<ServiceArea.Cluster, readonly [ServiceArea.Feature.Maps, ServiceArea.Feature.ProgressReporting]>, readonly []>, typeof ServiceAreaBaseServer, import("./ServiceAreaInterface.js").ServiceAreaInterface>;
export declare class ServiceAreaServer extends ServiceAreaServer_base {
}
export {};
//# sourceMappingURL=ServiceAreaServer.d.ts.map