//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use objc2_foundation::*;

use crate::*;

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/localauthentication/laenvironmentstate?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct LAEnvironmentState;
);

unsafe impl Send for LAEnvironmentState {}

unsafe impl Sync for LAEnvironmentState {}

extern_conformance!(
    unsafe impl NSCopying for LAEnvironmentState {}
);

unsafe impl CopyingHelper for LAEnvironmentState {
    type Result = Self;
}

extern_conformance!(
    unsafe impl NSObjectProtocol for LAEnvironmentState {}
);

impl LAEnvironmentState {
    extern_methods!(
        /// Clients shall not create environment state.
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        /// Clients shall not create environment state.
        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;

        #[cfg(all(
            feature = "LAEnvironmentMechanism",
            feature = "LAEnvironmentMechanismBiometry"
        ))]
        /// Information about biometric authentication (Touch ID, Face ID or Optic ID).
        ///
        /// `nil`if biometry is not supported by this device.
        #[unsafe(method(biometry))]
        #[unsafe(method_family = none)]
        pub unsafe fn biometry(&self) -> Option<Retained<LAEnvironmentMechanismBiometry>>;

        #[cfg(all(
            feature = "LAEnvironmentMechanism",
            feature = "LAEnvironmentMechanismUserPassword"
        ))]
        /// Information about local user password (on macOS) or passcode (on embedded platforms).
        ///
        /// `nil`if user password or passcode is not supported by this device.
        #[unsafe(method(userPassword))]
        #[unsafe(method_family = none)]
        pub unsafe fn userPassword(&self) -> Option<Retained<LAEnvironmentMechanismUserPassword>>;

        #[cfg(all(
            feature = "LAEnvironmentMechanism",
            feature = "LAEnvironmentMechanismCompanion"
        ))]
        /// Companion authentication mechanisms.
        ///
        /// Companion mechanisms such as Apple Watch can appear and disappear as they get in and out of reach, but
        /// this property enumerates paired companions, even if they are not reachable at the moment. Check
        /// `isUsable`property to determine if a particular companion type is available for use.
        /// Note that items in this array represent paired companion types, not individual devices. Therefore, even if the user
        /// has paired multiple Apple Watch devices for companion authentication, the array will contain only one
        /// `LAEnvironmentMechanimsCompanion`instance of type
        /// `LACompanionTypeWatch.`
        #[unsafe(method(companions))]
        #[unsafe(method_family = none)]
        pub unsafe fn companions(&self) -> Retained<NSArray<LAEnvironmentMechanismCompanion>>;

        #[cfg(feature = "LAEnvironmentMechanism")]
        /// Information about all authentication mechanisms.
        ///
        /// This property aggregates
        /// `biometry,``userPassword,``companions`and any future
        /// authentication mechanisms.
        #[unsafe(method(allMechanisms))]
        #[unsafe(method_family = none)]
        pub unsafe fn allMechanisms(&self) -> Retained<NSArray<LAEnvironmentMechanism>>;
    );
}
