import { MatrixClient } from "matrix-js-sdk/src/matrix";
import { SettingLevel } from "../SettingLevel";
import MatrixClientBackedController from "./MatrixClientBackedController";
import { WatchManager } from "../WatchManager";
/**
 * Disables a given setting if the server unstable feature it requires is not supported
 * When a setting gets disabled or enabled from this controller it notifies the given WatchManager
 */
export default class ServerSupportUnstableFeatureController extends MatrixClientBackedController {
    private readonly settingName;
    private readonly watchers;
    private readonly unstableFeatureGroups;
    private readonly stableVersion?;
    private readonly disabledMessage?;
    private readonly forcedValue;
    private enabled;
    /**
     * Construct a new ServerSupportUnstableFeatureController.
     *
     * @param unstableFeatureGroups - If any one of the feature groups is satisfied,
     * then the setting is considered enabled. A feature group is satisfied if all of
     * the features in the group are supported (all features in a group are required).
     */
    constructor(settingName: string, watchers: WatchManager, unstableFeatureGroups: string[][], stableVersion?: string | undefined, disabledMessage?: string | undefined, forcedValue?: any);
    get disabled(): boolean;
    set disabled(newDisabledValue: boolean);
    protected initMatrixClient(oldClient: MatrixClient, newClient: MatrixClient): Promise<void>;
    getValueOverride(level: SettingLevel, roomId: string | null, calculatedValue: any, calculatedAtLevel: SettingLevel | null): any;
    get settingDisabled(): boolean | string;
}
