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

use crate::*;

extern_class!(
    /// Builds requirements that can be used for protecting a
    /// `LARight`
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/localauthentication/laauthenticationrequirement?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct LAAuthenticationRequirement;
);

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

impl LAAuthenticationRequirement {
    extern_methods!(
        /// Requires user authentication
        ///
        /// Returns: `LAAuthenticationRequirement`instance
        #[unsafe(method(defaultRequirement))]
        #[unsafe(method_family = none)]
        pub unsafe fn defaultRequirement() -> Retained<LAAuthenticationRequirement>;

        /// Requires biometric authentication
        ///
        /// The authorization will fail if:
        ///
        /// • Biometry is not available in the current device
        ///
        /// • There are no biometric enrollments
        ///
        /// Returns: `LAAuthenticationRequirement`instance
        #[unsafe(method(biometryRequirement))]
        #[unsafe(method_family = none)]
        pub unsafe fn biometryRequirement() -> Retained<LAAuthenticationRequirement>;

        /// Requires user authentication with the current biometric set
        ///
        /// The authorization will fail if:
        ///
        /// • Biometry is not available in the current device
        ///
        /// • There are no biometric enrollments
        ///
        /// • There is a change in the enrollment database -e.g a new TouchID finger is enrolled.
        ///
        /// Returns: `LAAuthenticationRequirement`instance
        #[unsafe(method(biometryCurrentSetRequirement))]
        #[unsafe(method_family = none)]
        pub unsafe fn biometryCurrentSetRequirement() -> Retained<LAAuthenticationRequirement>;

        /// Requires biometric authentication or the given fallback method.
        ///
        /// Parameter `fallback`: Fallback used in case biometry authentication fails, is not available or
        /// not preferred by the user.
        ///
        /// Returns: `LAAuthenticationRequirement`instance
        #[unsafe(method(biometryRequirementWithFallback:))]
        #[unsafe(method_family = none)]
        pub unsafe fn biometryRequirementWithFallback(
            fallback: &LABiometryFallbackRequirement,
        ) -> Retained<Self>;
    );
}

/// Methods declared on superclass `NSObject`.
impl LAAuthenticationRequirement {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}

extern_class!(
    /// Builds authentication requirements that can be used as fallbacks for  biometric authentication
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/localauthentication/labiometryfallbackrequirement?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct LABiometryFallbackRequirement;
);

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

impl LABiometryFallbackRequirement {
    extern_methods!(
        /// Use default biometric fallback
        ///
        /// Returns: `LABiometryFallbackRequirement`instance
        #[unsafe(method(defaultRequirement))]
        #[unsafe(method_family = none)]
        pub unsafe fn defaultRequirement() -> Retained<LABiometryFallbackRequirement>;

        /// Requires authorization using the device passcode
        ///
        /// Returns: `LABiometryFallbackRequirement`instance
        #[unsafe(method(devicePasscodeRequirement))]
        #[unsafe(method_family = none)]
        pub unsafe fn devicePasscodeRequirement() -> Retained<LABiometryFallbackRequirement>;
    );
}

/// Methods declared on superclass `NSObject`.
impl LABiometryFallbackRequirement {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}
