// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.settings;

/// Modify or watch Night Mode setting. Night mode puts the device in a
/// restricted mode which can be overrided if the user prefers. During night
/// mode, the following settings apply as per night mode parameters:
/// 1. DoNotDisturb is enabled/not.
/// 2. System volume is set to an override maximum.
/// 3. LED Brightness is set to an overridable maximum.
/// 4. Sleep mode is enabled/not.
///
/// Supported SettingsEpitaph enums:
/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
@discoverable(server="platform")
closed protocol NightMode {
    /// Gets the current [`NightModeSettings`]. Returns immediately on first
    /// call; subsequent calls return when the values change.
    ///
    /// If this call fails, it is considered a fatal error and the channel
    /// will be closed.
    strict Watch() -> (struct {
        settings NightModeSettings;
    });

    /// Sets [`NightModeSettings`] settings. Any field not explicitly set in
    /// the table performs a no-op, and will not make any changes.
    strict Set(struct {
        settings NightModeSettings;
    }) -> () error Error;
};

/// Settings related to Night mode.
type NightModeSettings = table {
    /// If true, the device/user have opted in for NightMode routine.
    1: night_mode_enabled bool;
};
