{{> header excludeZapComment=true}}

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

{{#zcl_clusters}}
{{#zcl_structs}}
{{#*inline "interfaceDecl"}}
{{! Override the getter name because some of our properties start with things
    like "new" or "init" }}
{{#zcl_struct_items}}
@property (nonatomic, copy{{#unless (isStrEqual (asGetterName label) (asStructPropertyName label))}}, getter={{asGetterName label}}{{/unless}}) {{asObjectiveCType type parent.parent.name}} {{asStructPropertyName label}};
{{/zcl_struct_items}}

- (instancetype)init;
- (id)copyWithZone:(NSZone * _Nullable)zone;
{{/inline}}
{{! TODO: We need a better setup for the API_AVALABLE annotations here; this does not scale at all sanely. }}
{{#if (isStrEqual (asUpperCamelCase parent.name) "Descriptor")}}
{{#if (isStrEqual (asUpperCamelCase name) "DeviceTypeStruct")}}
API_AVAILABLE(ios(16.2), macos(13.1), watchos(9.2), tvos(16.2))
{{/if}}
{{else if (isStrEqual (asUpperCamelCase parent.name) "UnitTesting")}}
MTR_NEWLY_AVAILABLE
{{/if}}
@interface MTR{{asUpperCamelCase parent.name}}Cluster{{asUpperCamelCase name}} : NSObject <NSCopying>
{{> interfaceDecl}}
@end

{{!Backwards compat for now: Add a DeviceType thing that is API-compatible with DeviceTypeStruct. }}
{{#if (isStrEqual (asUpperCamelCase parent.name) "Descriptor")}}
{{#if (isStrEqual (asUpperCamelCase name) "DeviceTypeStruct")}}
@interface MTRDescriptorClusterDeviceType : NSObject <NSCopying>
{{> interfaceDecl}}
@end
{{/if}}
{{else if (isStrEqual (asUpperCamelCase parent.name) "UnitTesting")}}
MTR_NEWLY_DEPRECATED("Please use MTRUnitTestingCluster{{asUpperCamelCase name}}")
@interface MTRTestClusterCluster{{asUpperCamelCase name}} : MTRUnitTestingCluster{{asUpperCamelCase name}}
@end
{{/if}}
{{/zcl_structs}}

{{#zcl_events}}
{{#if (isStrEqual (asUpperCamelCase parent.name) "UnitTesting")}}
MTR_NEWLY_AVAILABLE
{{/if}}
@interface MTR{{asUpperCamelCase parent.name}}Cluster{{asUpperCamelCase name}}Event : NSObject <NSCopying>
{{#zcl_event_fields}}
@property (nonatomic, copy{{#unless (isStrEqual (asGetterName name) (asStructPropertyName name))}}, getter={{asGetterName name}}{{/unless}}) {{asObjectiveCType type parent.parent.name}} {{asStructPropertyName name}};
{{/zcl_event_fields}}

- (instancetype)init;
- (id)copyWithZone:(NSZone * _Nullable)zone;
@end
{{#if (isStrEqual (asUpperCamelCase parent.name) "UnitTesting")}}

MTR_NEWLY_DEPRECATED("Please use MTRUnitTestingCluster{{asUpperCamelCase name}}Event")
@interface MTRTestClusterCluster{{asUpperCamelCase name}}Event : MTRUnitTestingCluster{{asUpperCamelCase name}}Event
@end
{{/if}}

{{/zcl_events}}


{{/zcl_clusters}}

NS_ASSUME_NONNULL_END
