// 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.

mod cobalt;
mod composite;
#[cfg(test)]
mod fake;
mod inspect;

pub use self::cobalt::CobaltDiagnostics;
pub use self::composite::CompositeDiagnostics;
#[cfg(test)]
pub use self::fake::FakeDiagnostics;
pub use self::inspect::{InspectDiagnostics, INSPECTOR};

use {
    crate::enums::{
        ClockCorrectionStrategy, ClockUpdateReason, InitialClockState, InitializeRtcOutcome, Role,
        SampleValidationError, StartClockSource, TimeSourceError, Track, WriteRtcOutcome,
    },
    fidl_fuchsia_time_external::Status,
    fuchsia_zircon as zx,
};

/// A special `Duration` that will match any value during an `eq_with_any` operation.
#[cfg(test)]
pub const ANY_DURATION: zx::Duration = zx::Duration::from_nanos(i64::MIN);

/// A special time that will match any value during an `eq_with_any` operation.
#[cfg(test)]
pub const ANY_TIME: zx::Time = zx::Time::from_nanos(i64::MIN);

/// An event that is potantialle worth recording in one or more diagnostics systems.
#[derive(Clone, Debug, PartialEq)]
pub enum Event {
    /// Timekeeper has completed initialization.
    Initialized { clock_state: InitialClockState },
    /// An attempt was made to initialize and read from the real time clock.
    InitializeRtc { outcome: InitializeRtcOutcome, time: Option<zx::Time> },
    /// A time source failed, relaunch will be attempted.
    TimeSourceFailed { role: Role, error: TimeSourceError },
    /// A time source changed its state.
    TimeSourceStatus { role: Role, status: Status },
    /// A sample received from a time source was rejected during validation.
    SampleRejected { role: Role, error: SampleValidationError },
    /// The state of a Kalman filter was updated.
    KalmanFilterUpdated {
        /// The `Track` of the estimate.
        track: Track,
        /// The monotonic time at which the state applies.
        monotonic: zx::Time,
        /// The estimated UTC corresponding to monotonic.
        utc: zx::Time,
        /// Square root of element [0,0] of the covariance matrix.
        sqrt_covariance: zx::Duration,
    },
    /// A strategy has been determined to align the userspace clock with the estimated UTC.
    /// This will be followed by zero or more `UpdateClock` events to implement the strategy.
    ClockCorrection { track: Track, correction: zx::Duration, strategy: ClockCorrectionStrategy },
    /// An attempt was made to write to the real time clock.
    WriteRtc { outcome: WriteRtcOutcome },
    /// The userspace clock has been started for the first time.
    StartClock { track: Track, source: StartClockSource },
    /// The userspace clock has been updated.
    UpdateClock { track: Track, reason: ClockUpdateReason },
}

/// A standard interface for systems that record events for diagnostic purposes.
pub trait Diagnostics: Send + Sync {
    /// Records the supplied event if relevant.
    fn record(&self, event: Event);
}
