#import <Foundation/Foundation.h>
#import <Ably/ARTPush.h>

@class ARTDevicePushDetails;

NS_ASSUME_NONNULL_BEGIN

/**
 * Contains the properties of a device registered for push notifications.
 */
NS_SWIFT_SENDABLE
@interface ARTDeviceDetails : NSObject

/**
 * A unique ID generated by the device.
 */
@property (nonatomic, readonly) ARTDeviceId *id;

/**
 * The client ID the device is connected to Ably with.
 */
@property (nullable, nonatomic, readonly) NSString *clientId;

/**
 * The `ARTDevicePlatform` associated with the device. Describes the platform the device uses, such as `android` or `ios`.
 */
@property (nonatomic, readonly) NSString *platform;

/**
 * The `ARTDeviceFormFactor` object associated with the device. Describes the type of the device, such as `phone` or `tablet`.
 */
@property (nonatomic, readonly) NSString *formFactor;

/**
 * A JSON object of key-value pairs that contains metadata for the device.
 */
@property (nonatomic, readonly) NSDictionary<NSString *, NSString *> *metadata;

/**
 * The `ARTDevicePushDetails` object associated with the device. Describes the details of the push registration of the device.
 */
@property (nonatomic, readonly) ARTDevicePushDetails *push;

/// :nodoc:
- (instancetype)init;

/// :nodoc:
- (instancetype)initWithId:(ARTDeviceId *)deviceId;

@end

NS_ASSUME_NONNULL_END
