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

use crate::*;

// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct UIPrintInfoOutputType(pub NSInteger);
impl UIPrintInfoOutputType {
    pub const UIPrintInfoOutputGeneral: Self = Self(0);
    pub const UIPrintInfoOutputPhoto: Self = Self(1);
    pub const UIPrintInfoOutputGrayscale: Self = Self(2);
    pub const UIPrintInfoOutputPhotoGrayscale: Self = Self(3);
}

unsafe impl Encode for UIPrintInfoOutputType {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

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

// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct UIPrintInfoOrientation(pub NSInteger);
impl UIPrintInfoOrientation {
    #[doc(alias = "UIPrintInfoOrientationPortrait")]
    pub const Portrait: Self = Self(0);
    #[doc(alias = "UIPrintInfoOrientationLandscape")]
    pub const Landscape: Self = Self(1);
}

unsafe impl Encode for UIPrintInfoOrientation {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

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

// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct UIPrintInfoDuplex(pub NSInteger);
impl UIPrintInfoDuplex {
    #[doc(alias = "UIPrintInfoDuplexNone")]
    pub const None: Self = Self(0);
    #[doc(alias = "UIPrintInfoDuplexLongEdge")]
    pub const LongEdge: Self = Self(1);
    #[doc(alias = "UIPrintInfoDuplexShortEdge")]
    pub const ShortEdge: Self = Self(2);
}

unsafe impl Encode for UIPrintInfoDuplex {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

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

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

    unsafe impl ClassType for UIPrintInfo {
        type Super = NSObject;
        type Mutability = MainThreadOnly;
    }
);

unsafe impl NSCoding for UIPrintInfo {}

unsafe impl NSCopying for UIPrintInfo {}

unsafe impl NSObjectProtocol for UIPrintInfo {}

extern_methods!(
    unsafe impl UIPrintInfo {
        #[method_id(@__retain_semantics Init initWithCoder:)]
        pub unsafe fn initWithCoder(
            this: Allocated<Self>,
            coder: &NSCoder,
        ) -> Option<Retained<Self>>;

        #[method_id(@__retain_semantics Other printInfo)]
        pub unsafe fn printInfo(mtm: MainThreadMarker) -> Retained<UIPrintInfo>;

        #[method_id(@__retain_semantics Other printInfoWithDictionary:)]
        pub unsafe fn printInfoWithDictionary(
            dictionary: Option<&NSDictionary>,
            mtm: MainThreadMarker,
        ) -> Retained<UIPrintInfo>;

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

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

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

        #[method(setJobName:)]
        pub unsafe fn setJobName(&self, job_name: &NSString);

        #[method(outputType)]
        pub unsafe fn outputType(&self) -> UIPrintInfoOutputType;

        #[method(setOutputType:)]
        pub unsafe fn setOutputType(&self, output_type: UIPrintInfoOutputType);

        #[method(orientation)]
        pub unsafe fn orientation(&self) -> UIPrintInfoOrientation;

        #[method(setOrientation:)]
        pub unsafe fn setOrientation(&self, orientation: UIPrintInfoOrientation);

        #[method(duplex)]
        pub unsafe fn duplex(&self) -> UIPrintInfoDuplex;

        #[method(setDuplex:)]
        pub unsafe fn setDuplex(&self, duplex: UIPrintInfoDuplex);

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

extern_methods!(
    /// Methods declared on superclass `NSObject`
    unsafe impl UIPrintInfo {
        #[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(mtm: MainThreadMarker) -> Retained<Self>;
    }
);
