use crate::backend::c;
use crate::fd::BorrowedFd;

/// `CLOCK_*` constants for use with [`clock_gettime`].
///
/// These constants are always supported at runtime, so `clock_gettime` never
/// has to fail with `INVAL` due to an unsupported clock. See
/// [`DynamicClockId`] for a greater set of clocks, with the caveat that not
/// all of them are always supported.
///
/// [`clock_gettime`]: crate::time::clock_gettime
#[cfg(not(any(apple, target_os = "wasi")))]
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
#[cfg_attr(not(any(target_os = "aix", target_os = "dragonfly")), repr(i32))]
#[cfg_attr(target_os = "dragonfly", repr(u64))]
#[cfg_attr(target_os = "aix", repr(i64))]
#[non_exhaustive]
pub enum ClockId {
    /// `CLOCK_REALTIME`
    #[doc(alias = "CLOCK_REALTIME")]
    Realtime = bitcast!(c::CLOCK_REALTIME),

    /// `CLOCK_MONOTONIC`
    #[doc(alias = "CLOCK_MONOTONIC")]
    Monotonic = bitcast!(c::CLOCK_MONOTONIC),

    /// `CLOCK_UPTIME`
    #[cfg(any(freebsdlike, target_os = "openbsd"))]
    #[doc(alias = "CLOCK_UPTIME")]
    Uptime = c::CLOCK_UPTIME,

    /// `CLOCK_PROCESS_CPUTIME_ID`
    #[cfg(not(any(
        solarish,
        target_os = "netbsd",
        target_os = "redox",
        target_os = "vita"
    )))]
    #[doc(alias = "CLOCK_PROCESS_CPUTIME_ID")]
    ProcessCPUTime = c::CLOCK_PROCESS_CPUTIME_ID,

    /// `CLOCK_THREAD_CPUTIME_ID`
    #[cfg(not(any(
        solarish,
        target_os = "netbsd",
        target_os = "redox",
        target_os = "vita"
    )))]
    #[doc(alias = "CLOCK_THREAD_CPUTIME_ID")]
    ThreadCPUTime = c::CLOCK_THREAD_CPUTIME_ID,

    /// `CLOCK_REALTIME_COARSE`
    #[cfg(any(linux_kernel, target_os = "freebsd"))]
    #[doc(alias = "CLOCK_REALTIME_COARSE")]
    RealtimeCoarse = c::CLOCK_REALTIME_COARSE,

    /// `CLOCK_MONOTONIC_COARSE`
    #[cfg(any(linux_kernel, target_os = "freebsd"))]
    #[doc(alias = "CLOCK_MONOTONIC_COARSE")]
    MonotonicCoarse = c::CLOCK_MONOTONIC_COARSE,

    /// `CLOCK_MONOTONIC_RAW`
    #[cfg(linux_kernel)]
    #[doc(alias = "CLOCK_MONOTONIC_RAW")]
    MonotonicRaw = c::CLOCK_MONOTONIC_RAW,

    /// `CLOCK_REALTIME_ALARM`
    #[cfg(linux_kernel)]
    #[doc(alias = "CLOCK_REALTIME_ALARM")]
    RealtimeAlarm = bitcast!(c::CLOCK_REALTIME_ALARM),

    /// `CLOCK_TAI`, available on Linux ≥ 3.10
    #[cfg(all(linux_kernel, feature = "linux_4_11"))]
    #[doc(alias = "CLOCK_TAI")]
    Tai = bitcast!(c::CLOCK_TAI),

    /// `CLOCK_BOOTTIME`
    ///
    /// On FreeBSD, use [`Self::Uptime`], as `CLOCK_BOOTTIME` is an alias for
    /// `CLOCK_UPTIME`.
    ///
    /// [`Self::Uptime`]: https://docs.rs/rustix/*/x86_64-unknown-freebsd/rustix/time/enum.ClockId.html#variant.Uptime
    #[cfg(any(linux_kernel, target_os = "fuchsia", target_os = "openbsd"))]
    #[doc(alias = "CLOCK_BOOTTIME")]
    Boottime = bitcast!(c::CLOCK_BOOTTIME),

    /// `CLOCK_BOOTTIME_ALARM`
    #[cfg(any(linux_kernel, target_os = "fuchsia"))]
    #[doc(alias = "CLOCK_BOOTTIME_ALARM")]
    BoottimeAlarm = bitcast!(c::CLOCK_BOOTTIME_ALARM),
}

/// `CLOCK_*` constants for use with [`clock_gettime`].
///
/// These constants are always supported at runtime, so `clock_gettime` never
/// has to fail with `INVAL` due to an unsupported clock. See
/// [`DynamicClockId`] for a greater set of clocks, with the caveat that not
/// all of them are always supported.
///
/// [`clock_gettime`]: crate::time::clock_gettime
#[cfg(apple)]
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
#[repr(u32)]
#[non_exhaustive]
pub enum ClockId {
    /// `CLOCK_REALTIME`
    #[doc(alias = "CLOCK_REALTIME")]
    Realtime = c::CLOCK_REALTIME,

    /// `CLOCK_MONOTONIC`
    #[doc(alias = "CLOCK_MONOTONIC")]
    Monotonic = c::CLOCK_MONOTONIC,

    /// `CLOCK_PROCESS_CPUTIME_ID`
    #[doc(alias = "CLOCK_PROCESS_CPUTIME_ID")]
    ProcessCPUTime = c::CLOCK_PROCESS_CPUTIME_ID,

    /// `CLOCK_THREAD_CPUTIME_ID`
    #[doc(alias = "CLOCK_THREAD_CPUTIME_ID")]
    ThreadCPUTime = c::CLOCK_THREAD_CPUTIME_ID,
}

/// `CLOCK_*` constants for use with [`clock_gettime_dynamic`].
///
/// These constants may be unsupported at runtime, depending on the OS version,
/// and `clock_gettime_dynamic` may fail with `INVAL`. See [`ClockId`] for
/// clocks which are always supported at runtime.
///
/// [`clock_gettime_dynamic`]: crate::time::clock_gettime_dynamic
#[cfg(not(target_os = "wasi"))]
#[derive(Debug, Copy, Clone)]
#[non_exhaustive]
pub enum DynamicClockId<'a> {
    /// `ClockId` values that are always supported at runtime.
    Known(ClockId),

    /// Linux dynamic clocks.
    Dynamic(BorrowedFd<'a>),

    /// `CLOCK_REALTIME_ALARM`
    #[cfg(linux_kernel)]
    #[doc(alias = "CLOCK_REALTIME_ALARM")]
    RealtimeAlarm,

    /// `CLOCK_TAI`, available on Linux ≥ 3.10
    #[cfg(linux_kernel)]
    #[doc(alias = "CLOCK_TAI")]
    Tai,

    /// `CLOCK_BOOTTIME`
    #[cfg(any(
        linux_kernel,
        target_os = "freebsd",
        target_os = "fuchsia",
        target_os = "openbsd"
    ))]
    #[doc(alias = "CLOCK_BOOTTIME")]
    Boottime,

    /// `CLOCK_BOOTTIME_ALARM`
    #[cfg(any(linux_kernel, target_os = "fuchsia"))]
    #[doc(alias = "CLOCK_BOOTTIME_ALARM")]
    BoottimeAlarm,
}
