{{> header}}

#import <Foundation/Foundation.h>
#import "MTRCallbackBridgeBase_internal.h"

#include <app/data-model/DecodableList.h>
#include <app/util/im-client-callbacks.h>
#include <app-common/zap-generated/cluster-objects.h>

typedef void (*CommandSuccessCallback)(void *, const chip::app::DataModel::NullObjectType &);
using CommandSuccessCallbackType = CommandSuccessCallback;
typedef void (*DefaultSuccessCallbackType)(void *);

typedef void (*VendorIdAttributeCallback)(void *, chip::VendorId);
typedef void (*NullableVendorIdAttributeCallback)(void *, const chip::app::DataModel::Nullable<chip::VendorId> &);

{{#chip_client_clusters includeAll=true}}
{{#chip_cluster_responses}}
typedef void (*{{asUpperCamelCase parent.name}}Cluster{{asUpperCamelCase name}}CallbackType)(void *, const chip::app::Clusters::{{asUpperCamelCase parent.name}}::Commands::{{asUpperCamelCase name}}::DecodableType &);
{{/chip_cluster_responses}}
{{/chip_client_clusters}}

{{#zcl_clusters}}
{{#zcl_enums}}
typedef void (*{{asUpperCamelCase parent.name}}Cluster{{asUpperCamelCase name}}AttributeCallback)(void *, chip::app::Clusters::{{asUpperCamelCase parent.name}}::{{asType label}});
typedef void (*Nullable{{asUpperCamelCase parent.name}}Cluster{{asUpperCamelCase name}}AttributeCallback)(void *, const chip::app::DataModel::Nullable<chip::app::Clusters::{{asUpperCamelCase parent.name}}::{{asType label}}> &);
{{/zcl_enums}}
{{/zcl_clusters}}

{{#chip_client_clusters includeAll=true}}
{{#chip_server_cluster_attributes}}
{{#if isArray}}
typedef void (*{{asUpperCamelCase parent.name}}{{asUpperCamelCase name}}ListAttributeCallback)(void * context, {{zapTypeToDecodableClusterObjectType type ns=parent.name isArgument=true}} data);
{{else}}
{{#if_is_struct type}}
typedef void (*{{asUpperCamelCase parent.name}}{{asUpperCamelCase name}}StructAttributeCallback)(void *, {{zapTypeToDecodableClusterObjectType type ns=parent.name isArgument=true forceNotOptional=true}});
{{/if_is_struct}}
{{#if_is_strongly_typed_bitmap type}}
typedef void (*{{asUpperCamelCase parent.name}}{{asUpperCamelCase name}}AttributeCallback)(void *, {{zapTypeToDecodableClusterObjectType type ns=parent.name isArgument=true forceNotOptional=true}});
{{/if_is_strongly_typed_bitmap}}
{{/if}}
{{/chip_server_cluster_attributes}}
{{/chip_client_clusters}}

{{#>MTRCallbackBridge header="1" partial-type="Status"                         }}DefaultSuccessCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" partial-type="CommandStatus"                  }}CommandSuccessCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Octet_String" isNullable=false ns="chip"}}OctetStringAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Octet_String" isNullable=true  ns="chip"}}NullableOctetStringAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Char_String"  isNullable=false ns="chip"}}CharStringAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Char_String"  isNullable=true  ns="chip"}}NullableCharStringAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Boolean"      isNullable=false ns="chip"}}BooleanAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Boolean"      isNullable=true  ns="chip"}}NullableBooleanAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int8u"        isNullable=false ns="chip"}}Int8uAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int8u"        isNullable=true  ns="chip"}}NullableInt8uAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int8s"        isNullable=false ns="chip"}}Int8sAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int8s"        isNullable=true  ns="chip"}}NullableInt8sAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int16u"       isNullable=false ns="chip"}}Int16uAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int16u"       isNullable=true  ns="chip"}}NullableInt16uAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int16s"       isNullable=false ns="chip"}}Int16sAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int16s"       isNullable=true  ns="chip"}}NullableInt16sAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int32u"       isNullable=false ns="chip"}}Int32uAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int32u"       isNullable=true  ns="chip"}}NullableInt32uAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int32s"       isNullable=false ns="chip"}}Int32sAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int32s"       isNullable=true  ns="chip"}}NullableInt32sAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int64u"       isNullable=false ns="chip"}}Int64uAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int64u"       isNullable=true  ns="chip"}}NullableInt64uAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int64s"       isNullable=false ns="chip"}}Int64sAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Int64s"       isNullable=true  ns="chip"}}NullableInt64sAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Single"       isNullable=false ns="chip"}}FloatAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Single"       isNullable=true  ns="chip"}}NullableFloatAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Double"       isNullable=false ns="chip"}}DoubleAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="Double"       isNullable=true  ns="chip"}}NullableDoubleAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="vendor_id"    isNullable=false ns="chip"}}VendorIdAttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type="vendor_id"    isNullable=true  ns="chip"}}NullableVendorIdAttributeCallback{{/MTRCallbackBridge}}

{{#chip_client_clusters includeAll=true}}
{{#chip_server_cluster_attributes}}
{{#if isArray}}
{{#>MTRCallbackBridge header="1" ns=parent.name                                }}{{asUpperCamelCase ../../name}}{{asUpperCamelCase ../name}}ListAttributeCallback{{/MTRCallbackBridge}}
{{else}}
  {{#if_is_struct type}}
  {{#>MTRCallbackBridge header="1" ns=parent.name                              }}{{asUpperCamelCase ../../name}}{{asUpperCamelCase ../name}}StructAttributeCallback{{/MTRCallbackBridge}}
  {{/if_is_struct}}
  {{#if_is_strongly_typed_bitmap type}}
  {{#>MTRCallbackBridge header="1" ns=parent.name                              }}{{asUpperCamelCase ../../name}}{{asUpperCamelCase ../name}}AttributeCallback{{/MTRCallbackBridge}}
  {{/if_is_strongly_typed_bitmap}}
{{/if}}
{{/chip_server_cluster_attributes}}
{{/chip_client_clusters}}

{{#chip_client_clusters includeAll=true}}
{{#chip_cluster_responses}}
{{#>MTRCallbackBridge header="1" partial-type="Command"                        }}{{asUpperCamelCase ../../name}}Cluster{{asUpperCamelCase ../name}}Callback{{/MTRCallbackBridge}}
{{/chip_cluster_responses}}
{{/chip_client_clusters}}

{{#zcl_clusters}}
{{#zcl_enums}}
{{#>MTRCallbackBridge header="1" type=(asType label) isNullable=false ns=parent.name}}{{asUpperCamelCase parent.name}}Cluster{{asUpperCamelCase name}}AttributeCallback{{/MTRCallbackBridge}}
{{#>MTRCallbackBridge header="1" type=(asType label) isNullable=true  ns=parent.name}}Nullable{{asUpperCamelCase parent.name}}Cluster{{asUpperCamelCase name}}AttributeCallback{{/MTRCallbackBridge}}
{{/zcl_enums}}
{{/zcl_clusters}}
