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

use crate::*;

/// [Apple's documentation](https://developer.apple.com/documentation/uikit/uiusernotificationtype?language=objc)
// NS_OPTIONS
#[deprecated = "Use UserNotifications Framework's UNAuthorizationOptions"]
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct UIUserNotificationType(pub NSUInteger);
bitflags::bitflags! {
    impl UIUserNotificationType: NSUInteger {
        #[doc(alias = "UIUserNotificationTypeNone")]
#[deprecated = "Use UserNotifications Framework's UNAuthorizationOptions"]
        const None = 0;
        #[doc(alias = "UIUserNotificationTypeBadge")]
#[deprecated = "Use UserNotifications Framework's UNAuthorizationOptions"]
        const Badge = 1<<0;
        #[doc(alias = "UIUserNotificationTypeSound")]
#[deprecated = "Use UserNotifications Framework's UNAuthorizationOptions"]
        const Sound = 1<<1;
        #[doc(alias = "UIUserNotificationTypeAlert")]
#[deprecated = "Use UserNotifications Framework's UNAuthorizationOptions"]
        const Alert = 1<<2;
    }
}

unsafe impl Encode for UIUserNotificationType {
    const ENCODING: Encoding = NSUInteger::ENCODING;
}

unsafe impl RefEncode for UIUserNotificationType {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

/// [Apple's documentation](https://developer.apple.com/documentation/uikit/uiusernotificationactionbehavior?language=objc)
// NS_ENUM
#[deprecated = "Use UserNotifications Framework's UNNotificationAction or UNTextInputNotificationAction"]
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct UIUserNotificationActionBehavior(pub NSUInteger);
impl UIUserNotificationActionBehavior {
    #[doc(alias = "UIUserNotificationActionBehaviorDefault")]
    #[deprecated = "Use UserNotifications Framework's UNNotificationAction or UNTextInputNotificationAction"]
    pub const Default: Self = Self(0);
    #[doc(alias = "UIUserNotificationActionBehaviorTextInput")]
    #[deprecated = "Use UserNotifications Framework's UNNotificationAction or UNTextInputNotificationAction"]
    pub const TextInput: Self = Self(1);
}

unsafe impl Encode for UIUserNotificationActionBehavior {
    const ENCODING: Encoding = NSUInteger::ENCODING;
}

unsafe impl RefEncode for UIUserNotificationActionBehavior {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

/// [Apple's documentation](https://developer.apple.com/documentation/uikit/uiusernotificationactivationmode?language=objc)
// NS_ENUM
#[deprecated = "Use UserNotifications Framework's UNNotificationActionOptions"]
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct UIUserNotificationActivationMode(pub NSUInteger);
impl UIUserNotificationActivationMode {
    #[doc(alias = "UIUserNotificationActivationModeForeground")]
    #[deprecated = "Use UserNotifications Framework's UNNotificationActionOptions"]
    pub const Foreground: Self = Self(0);
    #[doc(alias = "UIUserNotificationActivationModeBackground")]
    #[deprecated = "Use UserNotifications Framework's UNNotificationActionOptions"]
    pub const Background: Self = Self(1);
}

unsafe impl Encode for UIUserNotificationActivationMode {
    const ENCODING: Encoding = NSUInteger::ENCODING;
}

unsafe impl RefEncode for UIUserNotificationActivationMode {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

/// [Apple's documentation](https://developer.apple.com/documentation/uikit/uiusernotificationactioncontext?language=objc)
// NS_ENUM
#[deprecated = "Use UserNotifications Framework's -[UNNotificationCategory actions] or -[UNNotificationCategory minimalActions]"]
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct UIUserNotificationActionContext(pub NSUInteger);
impl UIUserNotificationActionContext {
    #[doc(alias = "UIUserNotificationActionContextDefault")]
    #[deprecated = "Use UserNotifications Framework's -[UNNotificationCategory actions] or -[UNNotificationCategory minimalActions]"]
    pub const Default: Self = Self(0);
    #[doc(alias = "UIUserNotificationActionContextMinimal")]
    #[deprecated = "Use UserNotifications Framework's -[UNNotificationCategory actions] or -[UNNotificationCategory minimalActions]"]
    pub const Minimal: Self = Self(1);
}

unsafe impl Encode for UIUserNotificationActionContext {
    const ENCODING: Encoding = NSUInteger::ENCODING;
}

unsafe impl RefEncode for UIUserNotificationActionContext {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/uikit/uiusernotificationtextinputactionbuttontitlekey?language=objc)
    #[deprecated = "Use UserNotifications Framework's -[UNTextInputNotificationAction textInputButtonTitle]"]
    pub static UIUserNotificationTextInputActionButtonTitleKey: &'static NSString;
}

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/uikit/uiusernotificationactionresponsetypedtextkey?language=objc)
    #[deprecated = "Use UserNotifications Framework's -[UNTextInputNotificationResponse userText]"]
    pub static UIUserNotificationActionResponseTypedTextKey: &'static NSString;
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/uikit/uiusernotificationsettings?language=objc)
    #[unsafe(super(NSObject))]
    #[thread_kind = MainThreadOnly]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[deprecated = "Use UserNotifications Framework's UNNotificationSettings"]
    pub struct UIUserNotificationSettings;
);

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

impl UIUserNotificationSettings {
    extern_methods!(
        #[deprecated = "Use UserNotifications Framework's UNNotificationSettings"]
        #[unsafe(method(settingsForTypes:categories:))]
        #[unsafe(method_family = none)]
        pub fn settingsForTypes_categories(
            types: UIUserNotificationType,
            categories: Option<&NSSet<UIUserNotificationCategory>>,
            mtm: MainThreadMarker,
        ) -> Retained<Self>;

        #[deprecated = "Use UserNotifications Framework's UNNotificationSettings"]
        #[unsafe(method(types))]
        #[unsafe(method_family = none)]
        pub fn types(&self) -> UIUserNotificationType;

        #[deprecated = "Use UserNotifications Framework's UNNotificationSettings"]
        #[unsafe(method(categories))]
        #[unsafe(method_family = none)]
        pub fn categories(&self) -> Option<Retained<NSSet<UIUserNotificationCategory>>>;
    );
}

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

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

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/uikit/uiusernotificationcategory?language=objc)
    #[unsafe(super(NSObject))]
    #[thread_kind = MainThreadOnly]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[deprecated = "Use UserNotifications Framework's UNNotificationCategory"]
    pub struct UIUserNotificationCategory;
);

extern_conformance!(
    unsafe impl NSCoding for UIUserNotificationCategory {}
);

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

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

extern_conformance!(
    unsafe impl NSMutableCopying for UIUserNotificationCategory {}
);

unsafe impl MutableCopyingHelper for UIUserNotificationCategory {
    type Result = UIMutableUserNotificationCategory;
}

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

extern_conformance!(
    unsafe impl NSSecureCoding for UIUserNotificationCategory {}
);

impl UIUserNotificationCategory {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub fn init(this: Allocated<Self>) -> Retained<Self>;

        /// # Safety
        ///
        /// `coder` possibly has further requirements.
        #[unsafe(method(initWithCoder:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCoder(
            this: Allocated<Self>,
            coder: &NSCoder,
        ) -> Option<Retained<Self>>;

        #[unsafe(method(identifier))]
        #[unsafe(method_family = none)]
        pub fn identifier(&self) -> Option<Retained<NSString>>;

        #[unsafe(method(actionsForContext:))]
        #[unsafe(method_family = none)]
        pub fn actionsForContext(
            &self,
            context: UIUserNotificationActionContext,
        ) -> Option<Retained<NSArray<UIUserNotificationAction>>>;
    );
}

/// Methods declared on superclass `NSObject`.
impl UIUserNotificationCategory {
    extern_methods!(
        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub fn new(mtm: MainThreadMarker) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/uikit/uimutableusernotificationcategory?language=objc)
    #[unsafe(super(UIUserNotificationCategory, NSObject))]
    #[thread_kind = MainThreadOnly]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[deprecated = "Use UserNotifications Framework's UNNotificationCategory"]
    pub struct UIMutableUserNotificationCategory;
);

extern_conformance!(
    unsafe impl NSCoding for UIMutableUserNotificationCategory {}
);

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

unsafe impl CopyingHelper for UIMutableUserNotificationCategory {
    type Result = UIUserNotificationCategory;
}

extern_conformance!(
    unsafe impl NSMutableCopying for UIMutableUserNotificationCategory {}
);

unsafe impl MutableCopyingHelper for UIMutableUserNotificationCategory {
    type Result = Self;
}

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

extern_conformance!(
    unsafe impl NSSecureCoding for UIMutableUserNotificationCategory {}
);

impl UIMutableUserNotificationCategory {
    extern_methods!(
        #[deprecated = "Use UserNotifications Framework's UNNotificationCategory"]
        #[unsafe(method(identifier))]
        #[unsafe(method_family = none)]
        pub fn identifier(&self) -> Option<Retained<NSString>>;

        /// Setter for [`identifier`][Self::identifier].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[deprecated = "Use UserNotifications Framework's UNNotificationCategory"]
        #[unsafe(method(setIdentifier:))]
        #[unsafe(method_family = none)]
        pub fn setIdentifier(&self, identifier: Option<&NSString>);

        #[deprecated = "Use UserNotifications Framework's UNNotificationCategory"]
        #[unsafe(method(setActions:forContext:))]
        #[unsafe(method_family = none)]
        pub fn setActions_forContext(
            &self,
            actions: Option<&NSArray<UIUserNotificationAction>>,
            context: UIUserNotificationActionContext,
        );
    );
}

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

        /// # Safety
        ///
        /// `coder` possibly has further requirements.
        #[unsafe(method(initWithCoder:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCoder(
            this: Allocated<Self>,
            coder: &NSCoder,
        ) -> Option<Retained<Self>>;
    );
}

/// Methods declared on superclass `NSObject`.
impl UIMutableUserNotificationCategory {
    extern_methods!(
        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub fn new(mtm: MainThreadMarker) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/uikit/uiusernotificationaction?language=objc)
    #[unsafe(super(NSObject))]
    #[thread_kind = MainThreadOnly]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[deprecated = "Use UserNotifications Framework's UNNotificationAction"]
    pub struct UIUserNotificationAction;
);

extern_conformance!(
    unsafe impl NSCoding for UIUserNotificationAction {}
);

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

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

extern_conformance!(
    unsafe impl NSMutableCopying for UIUserNotificationAction {}
);

unsafe impl MutableCopyingHelper for UIUserNotificationAction {
    type Result = UIMutableUserNotificationAction;
}

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

extern_conformance!(
    unsafe impl NSSecureCoding for UIUserNotificationAction {}
);

impl UIUserNotificationAction {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub fn init(this: Allocated<Self>) -> Retained<Self>;

        /// # Safety
        ///
        /// `coder` possibly has further requirements.
        #[unsafe(method(initWithCoder:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCoder(
            this: Allocated<Self>,
            coder: &NSCoder,
        ) -> Option<Retained<Self>>;

        #[unsafe(method(identifier))]
        #[unsafe(method_family = none)]
        pub fn identifier(&self) -> Option<Retained<NSString>>;

        #[unsafe(method(title))]
        #[unsafe(method_family = none)]
        pub fn title(&self) -> Option<Retained<NSString>>;

        #[unsafe(method(behavior))]
        #[unsafe(method_family = none)]
        pub fn behavior(&self) -> UIUserNotificationActionBehavior;

        #[unsafe(method(parameters))]
        #[unsafe(method_family = none)]
        pub fn parameters(&self) -> Retained<NSDictionary>;

        #[unsafe(method(activationMode))]
        #[unsafe(method_family = none)]
        pub fn activationMode(&self) -> UIUserNotificationActivationMode;

        #[unsafe(method(isAuthenticationRequired))]
        #[unsafe(method_family = none)]
        pub fn isAuthenticationRequired(&self) -> bool;

        #[unsafe(method(isDestructive))]
        #[unsafe(method_family = none)]
        pub fn isDestructive(&self) -> bool;
    );
}

/// Methods declared on superclass `NSObject`.
impl UIUserNotificationAction {
    extern_methods!(
        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub fn new(mtm: MainThreadMarker) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/uikit/uimutableusernotificationaction?language=objc)
    #[unsafe(super(UIUserNotificationAction, NSObject))]
    #[thread_kind = MainThreadOnly]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[deprecated = "Use UserNotifications Framework's UNNotificationAction"]
    pub struct UIMutableUserNotificationAction;
);

extern_conformance!(
    unsafe impl NSCoding for UIMutableUserNotificationAction {}
);

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

unsafe impl CopyingHelper for UIMutableUserNotificationAction {
    type Result = UIUserNotificationAction;
}

extern_conformance!(
    unsafe impl NSMutableCopying for UIMutableUserNotificationAction {}
);

unsafe impl MutableCopyingHelper for UIMutableUserNotificationAction {
    type Result = Self;
}

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

extern_conformance!(
    unsafe impl NSSecureCoding for UIMutableUserNotificationAction {}
);

impl UIMutableUserNotificationAction {
    extern_methods!(
        #[deprecated = "Use UserNotifications Framework's UNNotificationAction"]
        #[unsafe(method(identifier))]
        #[unsafe(method_family = none)]
        pub fn identifier(&self) -> Option<Retained<NSString>>;

        /// Setter for [`identifier`][Self::identifier].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[deprecated = "Use UserNotifications Framework's UNNotificationAction"]
        #[unsafe(method(setIdentifier:))]
        #[unsafe(method_family = none)]
        pub fn setIdentifier(&self, identifier: Option<&NSString>);

        #[deprecated = "Use UserNotifications Framework's UNNotificationAction"]
        #[unsafe(method(title))]
        #[unsafe(method_family = none)]
        pub fn title(&self) -> Option<Retained<NSString>>;

        /// Setter for [`title`][Self::title].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[deprecated = "Use UserNotifications Framework's UNNotificationAction"]
        #[unsafe(method(setTitle:))]
        #[unsafe(method_family = none)]
        pub fn setTitle(&self, title: Option<&NSString>);

        #[unsafe(method(behavior))]
        #[unsafe(method_family = none)]
        pub fn behavior(&self) -> UIUserNotificationActionBehavior;

        /// Setter for [`behavior`][Self::behavior].
        #[unsafe(method(setBehavior:))]
        #[unsafe(method_family = none)]
        pub fn setBehavior(&self, behavior: UIUserNotificationActionBehavior);

        #[unsafe(method(parameters))]
        #[unsafe(method_family = none)]
        pub fn parameters(&self) -> Retained<NSDictionary>;

        /// Setter for [`parameters`][Self::parameters].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        ///
        /// # Safety
        ///
        /// `parameters` generic should be of the correct type.
        #[unsafe(method(setParameters:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setParameters(&self, parameters: &NSDictionary);

        #[deprecated = "Use UserNotifications Framework's UNNotificationAction"]
        #[unsafe(method(activationMode))]
        #[unsafe(method_family = none)]
        pub fn activationMode(&self) -> UIUserNotificationActivationMode;

        /// Setter for [`activationMode`][Self::activationMode].
        #[deprecated = "Use UserNotifications Framework's UNNotificationAction"]
        #[unsafe(method(setActivationMode:))]
        #[unsafe(method_family = none)]
        pub fn setActivationMode(&self, activation_mode: UIUserNotificationActivationMode);

        #[deprecated = "Use UserNotifications Framework's UNNotificationAction"]
        #[unsafe(method(isAuthenticationRequired))]
        #[unsafe(method_family = none)]
        pub fn isAuthenticationRequired(&self) -> bool;

        /// Setter for [`isAuthenticationRequired`][Self::isAuthenticationRequired].
        #[deprecated = "Use UserNotifications Framework's UNNotificationAction"]
        #[unsafe(method(setAuthenticationRequired:))]
        #[unsafe(method_family = none)]
        pub fn setAuthenticationRequired(&self, authentication_required: bool);

        #[deprecated = "Use UserNotifications Framework's UNNotificationAction"]
        #[unsafe(method(isDestructive))]
        #[unsafe(method_family = none)]
        pub fn isDestructive(&self) -> bool;

        /// Setter for [`isDestructive`][Self::isDestructive].
        #[deprecated = "Use UserNotifications Framework's UNNotificationAction"]
        #[unsafe(method(setDestructive:))]
        #[unsafe(method_family = none)]
        pub fn setDestructive(&self, destructive: bool);
    );
}

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

        /// # Safety
        ///
        /// `coder` possibly has further requirements.
        #[unsafe(method(initWithCoder:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCoder(
            this: Allocated<Self>,
            coder: &NSCoder,
        ) -> Option<Retained<Self>>;
    );
}

/// Methods declared on superclass `NSObject`.
impl UIMutableUserNotificationAction {
    extern_methods!(
        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub fn new(mtm: MainThreadMarker) -> Retained<Self>;
    );
}
