'''
{{> header}}
'''

# This file contains generated struct, enum, command definition.
# Users are not expected to import this file, instead, users can use import chip.clusters,
# which will import all symbols from this file and can get a readable, pretty naming like
# clusters.OnOff.commands.OnCommand

import typing
from dataclasses import dataclass, field
from enum import IntFlag

from chip import ChipUtility
from chip.clusters.enum import MatterIntEnum
from chip.tlv import float32, uint

from .ClusterObjects import (Cluster, ClusterAttributeDescriptor, ClusterCommand, ClusterEvent, ClusterObject,
                             ClusterObjectDescriptor, ClusterObjectFieldDescriptor)
from .Types import Nullable, NullValue

{{#zcl_clusters}}

@dataclass
class {{asUpperCamelCase name}}(Cluster):
    id: typing.ClassVar[int] = {{asMEI manufacturerCode code}}

    @ChipUtility.classproperty
    def descriptor(cls) -> ClusterObjectDescriptor:
        return ClusterObjectDescriptor(
            Fields=[
{{#zcl_attributes_server}}
            {{#if entryType}}
                ClusterObjectFieldDescriptor(Label="{{ asLowerCamelCase label }}", Tag={{asMEI manufacturerCode code}}, Type={{zapTypeToPythonClusterObjectType entryType ns=(asUpperCamelCase parent.name)}}),
            {{else}}
                ClusterObjectFieldDescriptor(Label="{{ asLowerCamelCase label }}", Tag={{asMEI manufacturerCode code}}, Type={{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.name)}}),
            {{/if}}
{{/zcl_attributes_server}}
            ])

{{#zcl_attributes_server}}
{{#if entryType}}
    {{ asLowerCamelCase label }}: '{{zapTypeToPythonClusterObjectType entryType ns=(asUpperCamelCase parent.name)}}' = None
{{else}}
    {{ asLowerCamelCase label }}: '{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.name)}}' = None
{{/if}}
{{/zcl_attributes_server}}

{{#zcl_enums}}
{{#first}}
    class Enums:
{{/first}}
        class {{asType label}}(MatterIntEnum):
{{#zcl_enum_items}}
            k{{asUpperCamelCase label}} = {{asHex value 2}}
{{/zcl_enum_items}}
{{#unless (isInConfigList (concat (asUpperCamelCase ../name) "::" label) "EnumsNotUsedAsTypeInXML")}}
            # All received enum values that are not listed above will be mapped
            # to kUnknownEnumValue. This is a helper enum value that should only
            # be used by code to process how it handles receiving and unknown
            # enum value. This specific should never be transmitted.
            kUnknownEnumValue = {{first_unused_enum_value mode="first_unused"}},
{{else}}
            # kUnknownEnumValue intentionally not defined. This enum never goes
            # through DataModel::Decode, likely because it is a part of a derived
            # cluster. As a result having kUnknownEnumValue in this enum is error
            # prone, and was removed. See
            # src/app/common/templates/config-data.yaml.
{{/unless}}

{{#last}}
{{/last}}
{{/zcl_enums}}
{{#zcl_bitmaps}}
{{#first}}
    class Bitmaps:
{{/first}}
        class {{asType label}}(IntFlag):
{{#zcl_bitmap_items}}
            k{{asUpperCamelCase label}} = {{asHex mask}}
{{/zcl_bitmap_items}}

{{/zcl_bitmaps}}
{{#zcl_structs}}
{{#first}}
    class Structs:
{{/first}}
        @dataclass
        class {{asUpperCamelCase name}}(ClusterObject):
            @ChipUtility.classproperty
            def descriptor(cls) -> ClusterObjectDescriptor:
                return ClusterObjectDescriptor(
                    Fields=[
                    {{#zcl_struct_items}}
                        ClusterObjectFieldDescriptor(Label="{{ asLowerCamelCase label }}", Tag={{ fieldIdentifier }}, Type={{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}),
                    {{/zcl_struct_items}}
                    ])

            {{#zcl_struct_items}}
            {{ asLowerCamelCase label }}: '{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}' = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.parent.name)}}
            {{/zcl_struct_items}}

{{/zcl_structs}}
{{#zcl_commands}}
{{#first}}
    class Commands:
{{/first}}
        @dataclass
        class {{asUpperCamelCase name}}(ClusterCommand):
            cluster_id: typing.ClassVar[int] = {{ asMEI parent.manufacturerCode parent.code }}
            command_id: typing.ClassVar[int] = {{ asMEI manufacturerCode code }}
{{#if (isServer source)}}
            is_client: typing.ClassVar[bool] = False
{{else}}
            is_client: typing.ClassVar[bool] = True
{{/if}}
            {{~#if responseName}}
            response_type: typing.ClassVar[str] = '{{asUpperCamelCase responseName}}'
            {{else}}
            response_type: typing.ClassVar[str] = None
            {{/if}}

            @ChipUtility.classproperty
            def descriptor(cls) -> ClusterObjectDescriptor:
                return ClusterObjectDescriptor(
                    Fields=[
                    {{#zcl_command_arguments}}
                        ClusterObjectFieldDescriptor(Label="{{ asLowerCamelCase label }}", Tag={{ index }}, Type={{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}),
                    {{/zcl_command_arguments}}
                    ])
            {{#if mustUseTimedInvoke}}

            @ChipUtility.classproperty
            def must_use_timed_invoke(cls) -> bool:
                return True
            {{/if}}
            {{#zcl_command_arguments}}
            {{#first}}

            {{/first}}
            {{ asLowerCamelCase label }}: '{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}' = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.parent.name)}}
            {{/zcl_command_arguments}}

{{/zcl_commands}}
{{#zcl_attributes_server}}
{{#first}}
    class Attributes:
{{/first}}
        @dataclass
        class {{asUpperCamelCase label}}(ClusterAttributeDescriptor):
            @ChipUtility.classproperty
            def cluster_id(cls) -> int:
                return {{ asMEI parent.manufacturerCode parent.code }}

            @ChipUtility.classproperty
            def attribute_id(cls) -> int:
                return {{ asMEI manufacturerCode code }}

            {{#if mustUseTimedWrite}}
            @ChipUtility.classproperty
            def must_use_timed_write(cls) -> bool:
                return True

            {{/if}}
            @ChipUtility.classproperty
            def attribute_type(cls) -> ClusterObjectFieldDescriptor:
            {{#if entryType}}
                return ClusterObjectFieldDescriptor(Type={{zapTypeToPythonClusterObjectType entryType ns=(asUpperCamelCase parent.name)}})
            {{else}}
                return ClusterObjectFieldDescriptor(Type={{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.name)}})
            {{/if}}

            {{#if entryType}}
            value: '{{zapTypeToPythonClusterObjectType entryType ns=(asUpperCamelCase parent.name)}}' = {{getPythonFieldDefault entryType ns=(asUpperCamelCase parent.name)}}
            {{else}}
            value: '{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.name)}}' = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.name)}}
            {{/if}}

{{/zcl_attributes_server}}
{{#zcl_events}}
{{#first}}
    class Events:
{{/first}}
        @dataclass
        class {{asUpperCamelCase name}}(ClusterEvent):
            @ChipUtility.classproperty
            def cluster_id(cls) -> int:
                return {{ asMEI parent.manufacturerCode parent.code }}

            @ChipUtility.classproperty
            def event_id(cls) -> int:
                return {{ asMEI manufacturerCode code }}

            @ChipUtility.classproperty
            def descriptor(cls) -> ClusterObjectDescriptor:
                return ClusterObjectDescriptor(
                    Fields=[
                    {{#zcl_event_fields}}
                        ClusterObjectFieldDescriptor(Label="{{ asLowerCamelCase name }}", Tag={{ fieldIdentifier }}, Type={{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}),
                    {{/zcl_event_fields}}
                    ])
            {{#zcl_event_fields}}
            {{#first}}

            {{/first}}
            {{ asLowerCamelCase name }}: '{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}' = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.parent.name)}}
            {{/zcl_event_fields}}

{{/zcl_events}}
{{/zcl_clusters}}
