/*
 *
 *    Copyright (c) 2013-2017 Nest Labs, Inc.
 *    All rights reserved.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

/**
 *    @file
 *      Objective-C representation of the DeviceDescription data communicated via device-description profile.
 *
 */

#import <Foundation/Foundation.h>

#import "NLWeaveDeviceManagerTypes.h"

@interface NLWeaveDeviceDescriptor : NSObject <NSCopying, NSCoding>

+ (instancetype)decodeDeviceDescriptor:(NSString *)descriptorStr;

@property (nonatomic, strong) NSNumber * DeviceId; // Weave device id (0 = not present)
@property (nonatomic, strong) NSNumber * FabricId; // Id of Weave fabric to which the device belongs (0 = not present)
@property (nonatomic) NSInteger DeviceFeatures; // Indicates support for specific device features.
@property (nonatomic) NSUInteger VendorId; // Device vendor code (0 = not present)
@property (nonatomic) NSInteger ProductId; // Device product code (0 = not present)
@property (nonatomic) NSUInteger ProductRevision; // Device product revision (0 = not present)

@property (nonatomic) NLManufacturingDate ManufacturingDate;

@property (nonatomic, strong)
    NSData * Primary802154MACAddress; // MAC address for primary 802.15.4 interface (big-endian, all zeros = not present)
@property (nonatomic, strong)
    NSData * PrimaryWiFiMACAddress; // MAC address for primary WiFi interface (big-endian, all zeros = not present)

@property (nonatomic, copy) NSString * SerialNumber; // Device serial number (nul terminated, 0 length = not present)
@property (nonatomic, copy) NSString * SoftwareVersion; // Active software version (nul terminated, 0 length = not present)
@property (nonatomic, copy)
    NSString * RendezvousWiFiESSID; // ESSID for pairing WiFi network (nul terminated, 0 length = not present)
@property (nonatomic) BOOL IsRendezvousWiFiESSIDSuffix; // True iff the RendezvousWiFiESSID contains a suffix string
@property (nonatomic, copy) NSString * PairingCode; // Device pairing code (nul terminated, 0 length = not present)

@property (nonatomic) NSUInteger PairingCompatibilityVersionMajor; // Major device pairing software compatibility version
@property (nonatomic) NSUInteger PairingCompatibilityVersionMinor; // Minor device pairing software compatibility version

- (BOOL)requiresLinePower; // Indicates a device that requires line power.

@end
