// Copyright 2021 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.
@available(added=7)
library fuchsia.power.profile;

/// System power profiles that may be returned by [Watcher.Watch].
type Profile = strict enum {
    /// There is no active work in the system. On a system that supports it, the device may be put
    /// into a lower-power or suspended state at any time.
    IDLE = 1;

    /// Some background activity is occurring that should prevent the system from dropping into a
    /// non-running or suspended state (example: downloading an OTA, performing a backup, or
    /// CPU-based hotword monitoring).
    BACKGROUND_ACTIVE = 2;

    /// The device is providing some user-visible experience such as running an app in the
    /// foreground or streaming audio, or has recently received interaction from a user.
    USER_ACTIVE = 3;
};

/// Protocol for observing changes to the system power profile.
@discoverable
closed protocol Watcher {
    /// Watches for changes to the system power profile.
    ///
    /// On a given connection, the first call will return immediately with the current system power
    /// profile, while subsequent calls will only return a new `profile` as the system power profile
    /// changes. This follows the
    /// [hanging get](https://fuchsia.dev/fuchsia-src/concepts/api/fidl#hanging-get) pattern. Any
    /// errors are considered fatal and will result in the channel being closed.
    strict Watch() -> (struct {
        profile Profile;
    });
};
