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

use crate::*;

extern_protocol!(
    pub unsafe trait UNNotificationContentProviding: NSObjectProtocol {}

    unsafe impl ProtocolType for dyn UNNotificationContentProviding {}
);

// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct UNNotificationInterruptionLevel(pub NSUInteger);
impl UNNotificationInterruptionLevel {
    #[doc(alias = "UNNotificationInterruptionLevelPassive")]
    pub const Passive: Self = Self(0);
    #[doc(alias = "UNNotificationInterruptionLevelActive")]
    pub const Active: Self = Self(1);
    #[doc(alias = "UNNotificationInterruptionLevelTimeSensitive")]
    pub const TimeSensitive: Self = Self(2);
    #[doc(alias = "UNNotificationInterruptionLevelCritical")]
    pub const Critical: Self = Self(3);
}

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

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

extern_class!(
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct UNNotificationContent;

    unsafe impl ClassType for UNNotificationContent {
        type Super = NSObject;
        type Mutability = InteriorMutable;
    }
);

unsafe impl NSCoding for UNNotificationContent {}

unsafe impl NSCopying for UNNotificationContent {}

unsafe impl NSMutableCopying for UNNotificationContent {}

unsafe impl NSObjectProtocol for UNNotificationContent {}

unsafe impl NSSecureCoding for UNNotificationContent {}

extern_methods!(
    unsafe impl UNNotificationContent {
        #[cfg(feature = "UNNotificationAttachment")]
        #[method_id(@__retain_semantics Other attachments)]
        pub unsafe fn attachments(&self) -> Retained<NSArray<UNNotificationAttachment>>;

        #[method_id(@__retain_semantics Other badge)]
        pub unsafe fn badge(&self) -> Option<Retained<NSNumber>>;

        #[method_id(@__retain_semantics Other body)]
        pub unsafe fn body(&self) -> Retained<NSString>;

        #[method_id(@__retain_semantics Other categoryIdentifier)]
        pub unsafe fn categoryIdentifier(&self) -> Retained<NSString>;

        #[method_id(@__retain_semantics Other launchImageName)]
        pub unsafe fn launchImageName(&self) -> Retained<NSString>;

        #[cfg(feature = "UNNotificationSound")]
        #[method_id(@__retain_semantics Other sound)]
        pub unsafe fn sound(&self) -> Option<Retained<UNNotificationSound>>;

        #[method_id(@__retain_semantics Other subtitle)]
        pub unsafe fn subtitle(&self) -> Retained<NSString>;

        #[method_id(@__retain_semantics Other threadIdentifier)]
        pub unsafe fn threadIdentifier(&self) -> Retained<NSString>;

        #[method_id(@__retain_semantics Other title)]
        pub unsafe fn title(&self) -> Retained<NSString>;

        #[method_id(@__retain_semantics Other userInfo)]
        pub unsafe fn userInfo(&self) -> Retained<NSDictionary>;

        #[deprecated = "summaryArgument is ignored"]
        #[method_id(@__retain_semantics Other summaryArgument)]
        pub unsafe fn summaryArgument(&self) -> Retained<NSString>;

        #[deprecated = "summaryArgumentCount is ignored"]
        #[method(summaryArgumentCount)]
        pub unsafe fn summaryArgumentCount(&self) -> NSUInteger;

        #[method_id(@__retain_semantics Other targetContentIdentifier)]
        pub unsafe fn targetContentIdentifier(&self) -> Option<Retained<NSString>>;

        #[method(interruptionLevel)]
        pub unsafe fn interruptionLevel(&self) -> UNNotificationInterruptionLevel;

        #[method(relevanceScore)]
        pub unsafe fn relevanceScore(&self) -> c_double;

        #[method_id(@__retain_semantics Other filterCriteria)]
        pub unsafe fn filterCriteria(&self) -> Option<Retained<NSString>>;

        #[method_id(@__retain_semantics Other contentByUpdatingWithProvider:error:_)]
        pub unsafe fn contentByUpdatingWithProvider_error(
            &self,
            provider: &ProtocolObject<dyn UNNotificationContentProviding>,
        ) -> Result<Retained<UNNotificationContent>, Retained<NSError>>;
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    unsafe impl UNNotificationContent {
        #[method_id(@__retain_semantics Init init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[method_id(@__retain_semantics New new)]
        pub unsafe fn new() -> Retained<Self>;
    }
);

extern_class!(
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct UNMutableNotificationContent;

    unsafe impl ClassType for UNMutableNotificationContent {
        #[inherits(NSObject)]
        type Super = UNNotificationContent;
        type Mutability = InteriorMutable;
    }
);

unsafe impl NSCoding for UNMutableNotificationContent {}

unsafe impl NSCopying for UNMutableNotificationContent {}

unsafe impl NSMutableCopying for UNMutableNotificationContent {}

unsafe impl NSObjectProtocol for UNMutableNotificationContent {}

unsafe impl NSSecureCoding for UNMutableNotificationContent {}

extern_methods!(
    unsafe impl UNMutableNotificationContent {
        #[cfg(feature = "UNNotificationAttachment")]
        #[method_id(@__retain_semantics Other attachments)]
        pub unsafe fn attachments(&self) -> Retained<NSArray<UNNotificationAttachment>>;

        #[cfg(feature = "UNNotificationAttachment")]
        #[method(setAttachments:)]
        pub unsafe fn setAttachments(&self, attachments: &NSArray<UNNotificationAttachment>);

        #[method_id(@__retain_semantics Other badge)]
        pub unsafe fn badge(&self) -> Option<Retained<NSNumber>>;

        #[method(setBadge:)]
        pub unsafe fn setBadge(&self, badge: Option<&NSNumber>);

        #[method_id(@__retain_semantics Other body)]
        pub unsafe fn body(&self) -> Retained<NSString>;

        #[method(setBody:)]
        pub unsafe fn setBody(&self, body: &NSString);

        #[method_id(@__retain_semantics Other categoryIdentifier)]
        pub unsafe fn categoryIdentifier(&self) -> Retained<NSString>;

        #[method(setCategoryIdentifier:)]
        pub unsafe fn setCategoryIdentifier(&self, category_identifier: &NSString);

        #[method_id(@__retain_semantics Other launchImageName)]
        pub unsafe fn launchImageName(&self) -> Retained<NSString>;

        #[method(setLaunchImageName:)]
        pub unsafe fn setLaunchImageName(&self, launch_image_name: &NSString);

        #[cfg(feature = "UNNotificationSound")]
        #[method_id(@__retain_semantics Other sound)]
        pub unsafe fn sound(&self) -> Option<Retained<UNNotificationSound>>;

        #[cfg(feature = "UNNotificationSound")]
        #[method(setSound:)]
        pub unsafe fn setSound(&self, sound: Option<&UNNotificationSound>);

        #[method_id(@__retain_semantics Other subtitle)]
        pub unsafe fn subtitle(&self) -> Retained<NSString>;

        #[method(setSubtitle:)]
        pub unsafe fn setSubtitle(&self, subtitle: &NSString);

        #[method_id(@__retain_semantics Other threadIdentifier)]
        pub unsafe fn threadIdentifier(&self) -> Retained<NSString>;

        #[method(setThreadIdentifier:)]
        pub unsafe fn setThreadIdentifier(&self, thread_identifier: &NSString);

        #[method_id(@__retain_semantics Other title)]
        pub unsafe fn title(&self) -> Retained<NSString>;

        #[method(setTitle:)]
        pub unsafe fn setTitle(&self, title: &NSString);

        #[method_id(@__retain_semantics Other userInfo)]
        pub unsafe fn userInfo(&self) -> Retained<NSDictionary>;

        #[method(setUserInfo:)]
        pub unsafe fn setUserInfo(&self, user_info: &NSDictionary);

        #[deprecated = "summaryArgument is ignored"]
        #[method_id(@__retain_semantics Other summaryArgument)]
        pub unsafe fn summaryArgument(&self) -> Retained<NSString>;

        #[deprecated = "summaryArgument is ignored"]
        #[method(setSummaryArgument:)]
        pub unsafe fn setSummaryArgument(&self, summary_argument: &NSString);

        #[deprecated = "summaryArgumentCount is ignored"]
        #[method(summaryArgumentCount)]
        pub unsafe fn summaryArgumentCount(&self) -> NSUInteger;

        #[deprecated = "summaryArgumentCount is ignored"]
        #[method(setSummaryArgumentCount:)]
        pub unsafe fn setSummaryArgumentCount(&self, summary_argument_count: NSUInteger);

        #[method_id(@__retain_semantics Other targetContentIdentifier)]
        pub unsafe fn targetContentIdentifier(&self) -> Option<Retained<NSString>>;

        #[method(setTargetContentIdentifier:)]
        pub unsafe fn setTargetContentIdentifier(
            &self,
            target_content_identifier: Option<&NSString>,
        );

        #[method(interruptionLevel)]
        pub unsafe fn interruptionLevel(&self) -> UNNotificationInterruptionLevel;

        #[method(setInterruptionLevel:)]
        pub unsafe fn setInterruptionLevel(
            &self,
            interruption_level: UNNotificationInterruptionLevel,
        );

        #[method(relevanceScore)]
        pub unsafe fn relevanceScore(&self) -> c_double;

        #[method(setRelevanceScore:)]
        pub unsafe fn setRelevanceScore(&self, relevance_score: c_double);

        #[method_id(@__retain_semantics Other filterCriteria)]
        pub unsafe fn filterCriteria(&self) -> Option<Retained<NSString>>;

        #[method(setFilterCriteria:)]
        pub unsafe fn setFilterCriteria(&self, filter_criteria: Option<&NSString>);
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    unsafe impl UNMutableNotificationContent {
        #[method_id(@__retain_semantics Init init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[method_id(@__retain_semantics New new)]
        pub unsafe fn new() -> Retained<Self>;
    }
);
