// Copyright 2019 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.recovery.ui;

using zx;

/// Information provided through the FactoryResetCountdown protocol on the
/// current factory reset state.
type FactoryResetCountdownState = table {
    /// The time of when factory reset is scheduled to be triggered when a
    /// countdown for factory reset is in progress with respect to the monotonic
    /// clock. This field is left unpopulated if no reset is scheduled.
    1: scheduled_reset_time zx.time;
};

/// Protocol to watch for changes when a factory reset countdown is started or
/// cancelled. An immediate factory reset does not start a countdown.
@discoverable
protocol FactoryResetCountdown {
    /// Hanging get that returns when a factory reset is scheduled or a
    /// scheduled factory reset is cancelled. Will return immediately on first
    /// call per connection and then on change after that.
    Watch() -> (struct {
        state FactoryResetCountdownState;
    });
};
