{{> header}}

// Prevent multiple inclusion
#pragma once

#include <app/util/privilege-storage.h>

// Prevent changing generated format
// clang-format off

////////////////////////////////////////////////////////////////////////////////

{{#all_user_clusters side='server'}}
    {{#first}}
// Parallel array data (*cluster*, attribute, privilege) for read attribute
#define GENERATED_ACCESS_READ_ATTRIBUTE__CLUSTER { \
    {{/first}}
    {{#enabled_attributes_for_cluster_and_side name 'server'}}
        {{#access entity="attribute"}}
            {{#if hasOperation}}
                {{#if (isStrEqual operation "read")}}
                    {{#if hasRole}}
                        {{#if (isStrEqual role "view")}}
    /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "operate")}}
    {{asMEI parent.parent.manufacturerCode parent.parent.code}}, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "manage")}}
    {{asMEI parent.parent.manufacturerCode parent.parent.code}}, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "administer")}}
    {{asMEI parent.parent.manufacturerCode parent.parent.code}}, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else}}
    ERROR: access has unrecognized role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                        {{/if}}
                    {{else}}
    ERROR: access has operation but no role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                    {{/if}}
                {{/if}}
            {{/if}}
        {{/access}}
    {{/enabled_attributes_for_cluster_and_side}}
    {{#last}}
}
    {{/last}}
{{/all_user_clusters}}

{{#all_user_clusters side='server'}}
    {{#first}}
// Parallel array data (cluster, *attribute*, privilege) for read attribute
#define GENERATED_ACCESS_READ_ATTRIBUTE__ATTRIBUTE { \
    {{/first}}
    {{#enabled_attributes_for_cluster_and_side name 'server'}}
        {{#access entity="attribute"}}
            {{#if hasOperation}}
                {{#if (isStrEqual operation "read")}}
                    {{#if hasRole}}
                        {{#if (isStrEqual role "view")}}
    /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "operate")}}
    {{asMEI parent.manufacturerCode parent.code}}, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "manage")}}
    {{asMEI parent.manufacturerCode parent.code}}, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "administer")}}
    {{asMEI parent.manufacturerCode parent.code}}, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else}}
    ERROR: access has unrecognized role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                        {{/if}}
                    {{else}}
    ERROR: access has operation but no role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                    {{/if}}
                {{/if}}
            {{/if}}
        {{/access}}
    {{/enabled_attributes_for_cluster_and_side}}
    {{#last}}
}
    {{/last}}
{{/all_user_clusters}}

{{#all_user_clusters side='server'}}
    {{#first}}
// Parallel array data (cluster, attribute, *privilege*) for read attribute
#define GENERATED_ACCESS_READ_ATTRIBUTE__PRIVILEGE { \
    {{/first}}
    {{#enabled_attributes_for_cluster_and_side name 'server'}}
        {{#access entity="attribute"}}
            {{#if hasOperation}}
                {{#if (isStrEqual operation "read")}}
                    {{#if hasRole}}
                        {{#if (isStrEqual role "view")}}
    /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "operate")}}
    kMatterAccessPrivilegeOperate, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "manage")}}
    kMatterAccessPrivilegeManage, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "administer")}}
    kMatterAccessPrivilegeAdminister, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else}}
    ERROR: access has unrecognized role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                        {{/if}}
                    {{else}}
    ERROR: access has operation but no role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                    {{/if}}
                {{/if}}
            {{/if}}
        {{/access}}
    {{/enabled_attributes_for_cluster_and_side}}
    {{#last}}
}
    {{/last}}
{{/all_user_clusters}}

////////////////////////////////////////////////////////////////////////////////

{{#all_user_clusters side='server'}}
    {{#first}}
// Parallel array data (*cluster*, attribute, privilege) for write attribute
#define GENERATED_ACCESS_WRITE_ATTRIBUTE__CLUSTER { \
    {{/first}}
    {{#enabled_attributes_for_cluster_and_side name 'server'}}
        {{#access entity="attribute"}}
            {{#if hasOperation}}
                {{#if (isStrEqual operation "write")}}
                    {{#if hasRole}}
                        {{#if (isStrEqual role "view")}}
    ERROR: access has disallowed role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                        {{else if (isStrEqual role "operate")}}
    /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "manage")}}
    {{asMEI parent.parent.manufacturerCode parent.parent.code}}, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "administer")}}
    {{asMEI parent.parent.manufacturerCode parent.parent.code}}, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else}}
    ERROR: access has unrecognized role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                        {{/if}}
                    {{else}}
    ERROR: access has operation but no role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                    {{/if}}
                {{/if}}
            {{/if}}
        {{/access}}
    {{/enabled_attributes_for_cluster_and_side}}
    {{#last}}
}
    {{/last}}
{{/all_user_clusters}}

{{#all_user_clusters side='server'}}
    {{#first}}
// Parallel array data (cluster, *attribute*, privilege) for write attribute
#define GENERATED_ACCESS_WRITE_ATTRIBUTE__ATTRIBUTE { \
    {{/first}}
    {{#enabled_attributes_for_cluster_and_side name 'server'}}
        {{#access entity="attribute"}}
            {{#if hasOperation}}
                {{#if (isStrEqual operation "write")}}
                    {{#if hasRole}}
                        {{#if (isStrEqual role "view")}}
    ERROR: access has disallowed role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                        {{else if (isStrEqual role "operate")}}
    /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "manage")}}
    {{asMEI parent.manufacturerCode parent.code}}, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "administer")}}
    {{asMEI parent.manufacturerCode parent.code}}, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else}}
    ERROR: access has unrecognized role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                        {{/if}}
                    {{else}}
    ERROR: access has operation but no role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                    {{/if}}
                {{/if}}
            {{/if}}
        {{/access}}
    {{/enabled_attributes_for_cluster_and_side}}
    {{#last}}
}
    {{/last}}
{{/all_user_clusters}}

{{#all_user_clusters side='server'}}
    {{#first}}
// Parallel array data (cluster, attribute, *privilege*) for write attribute
#define GENERATED_ACCESS_WRITE_ATTRIBUTE__PRIVILEGE { \
    {{/first}}
    {{#enabled_attributes_for_cluster_and_side name 'server'}}
        {{#access entity="attribute"}}
            {{#if hasOperation}}
                {{#if (isStrEqual operation "write")}}
                    {{#if hasRole}}
                        {{#if (isStrEqual role "view")}}
    ERROR: access has disallowed role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                        {{else if (isStrEqual role "operate")}}
    /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "manage")}}
    kMatterAccessPrivilegeManage, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "administer")}}
    kMatterAccessPrivilegeAdminister, /* Cluster: {{parent.parent.name}}, Attribute: {{parent.name}}, Privilege: {{role}} */ \
                        {{else}}
    ERROR: access has unrecognized role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                        {{/if}}
                    {{else}}
    ERROR: access has operation but no role/privilege [ Cluster: {{parent.parent.name}}, Attribute: {{parent.name}} ]
                    {{/if}}
                {{/if}}
            {{/if}}
        {{/access}}
    {{/enabled_attributes_for_cluster_and_side}}
    {{#last}}
}
    {{/last}}
{{/all_user_clusters}}

////////////////////////////////////////////////////////////////////////////////

{{#all_user_clusters side='server'}}
    {{#first}}
// Parallel array data (*cluster*, command, privilege) for invoke command
#define GENERATED_ACCESS_INVOKE_COMMAND__CLUSTER { \
    {{/first}}
    {{#all_incoming_commands_for_cluster name "server"}}
        {{#access entity="command"}}
            {{#if hasOperation}}
                {{#if (isStrEqual operation "invoke")}}
                    {{#if hasRole}}
                        {{#if (isStrEqual role "view")}}
    ERROR: access has disallowed role/privilege [ Cluster: {{parent.parent.name}}, Command: {{parent.commandName}} ]
                        {{else if (isStrEqual role "operate")}}
    /* Cluster: {{parent.parent.name}}, Command: {{parent.commandName}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "manage")}}
    {{asMEI parent.parent.manufacturerCode parent.parent.code}}, /* Cluster: {{parent.parent.name}}, Command: {{parent.commandName}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "administer")}}
    {{asMEI parent.parent.manufacturerCode parent.parent.code}}, /* Cluster: {{parent.parent.name}}, Command: {{parent.commandName}}, Privilege: {{role}} */ \
                        {{else}}
    ERROR: access has unrecognized role/privilege [ Cluster: {{parent.parent.name}}, Command: {{parent.commandName}} ]
                        {{/if}}
                    {{else}}
    ERROR: access has operation but no role/privilege [ Cluster: {{parent.parent.name}}, Command: {{parent.commandName}} ]
                    {{/if}}
                {{/if}}
            {{/if}}
        {{/access}}
    {{/all_incoming_commands_for_cluster}}
    {{#last}}
}
    {{/last}}
{{/all_user_clusters}}

{{#all_user_clusters side='server'}}
    {{#first}}
// Parallel array data (cluster, *command*, privilege) for invoke command
#define GENERATED_ACCESS_INVOKE_COMMAND__COMMAND { \
    {{/first}}
    {{#all_incoming_commands_for_cluster name "server"}}
        {{#access entity="command"}}
            {{#if hasOperation}}
                {{#if (isStrEqual operation "invoke")}}
                    {{#if hasRole}}
                        {{#if (isStrEqual role "view")}}
    ERROR: access has disallowed role/privilege [ Cluster: {{parent.parent.name}}, Command: {{parent.commandName}} ]
                        {{else if (isStrEqual role "operate")}}
    /* Cluster: {{parent.parent.name}}, Command: {{parent.commandName}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "manage")}}
    {{asMEI parent.commandMfgCode parent.code}}, /* Cluster: {{parent.parent.name}}, Command: {{parent.commandName}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "administer")}}
    {{asMEI parent.commandMfgCode parent.code}}, /* Cluster: {{parent.parent.name}}, Command: {{parent.commandName}}, Privilege: {{role}} */ \
                        {{else}}
    ERROR: access has unrecognized role/privilege [ Cluster: {{parent.parent.name}}, Command: {{parent.commandName}} ]
                        {{/if}}
                    {{else}}
    ERROR: access has operation but no role/privilege [ Cluster: {{parent.parent.name}}, Command: {{parent.commandName}} ]
                    {{/if}}
                {{/if}}
            {{/if}}
        {{/access}}
    {{/all_incoming_commands_for_cluster}}
    {{#last}}
}
    {{/last}}
{{/all_user_clusters}}

{{#all_user_clusters side='server'}}
    {{#first}}
// Parallel array data (cluster, command, *privilege*) for invoke command
#define GENERATED_ACCESS_INVOKE_COMMAND__PRIVILEGE { \
    {{/first}}
    {{#all_incoming_commands_for_cluster name "server"}}
        {{#access entity="command"}}
            {{#if hasOperation}}
                {{#if (isStrEqual operation "invoke")}}
                    {{#if hasRole}}
                        {{#if (isStrEqual role "view")}}
    ERROR: access has disallowed role/privilege [ Cluster: {{parent.parent.name}}, Command: {{parent.commandName}} ]
                        {{else if (isStrEqual role "operate")}}
    /* Cluster: {{parent.parent.name}}, Command: {{parent.commandName}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "manage")}}
    kMatterAccessPrivilegeManage, /* Cluster: {{parent.parent.name}}, Command: {{parent.commandName}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "administer")}}
    kMatterAccessPrivilegeAdminister, /* Cluster: {{parent.parent.name}}, Command: {{parent.commandName}}, Privilege: {{role}} */ \
                        {{else}}
    ERROR: access has unrecognized role/privilege [ Cluster: {{parent.parent.name}}, Command: {{parent.commandName}} ]
                        {{/if}}
                    {{else}}
    ERROR: access has operation but no role/privilege [ Cluster: {{parent.parent.name}}, Command: {{parent.commandName}} ]
                    {{/if}}
                {{/if}}
            {{/if}}
        {{/access}}
    {{/all_incoming_commands_for_cluster}}
    {{#last}}
}
    {{/last}}
{{/all_user_clusters}}

////////////////////////////////////////////////////////////////////////////////

{{#all_user_clusters side='server'}}
    {{#first}}
// Parallel array data (*cluster*, event, privilege) for read event
#define GENERATED_ACCESS_READ_EVENT__CLUSTER { \
    {{/first}}
    {{#zcl_events}}
        {{#access entity="event"}}
            {{#if hasOperation}}
                {{#if (isStrEqual operation "read")}}
                    {{#if hasRole}}
                        {{#if (isStrEqual role "view")}}
    /* Cluster: {{parent.parent.name}}, Event: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "operate")}}
    {{asMEI parent.parent.manufacturerCode parent.parent.code}}, /* Cluster: {{parent.parent.name}}, Event: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "manage")}}
    {{asMEI parent.parent.manufacturerCode parent.parent.code}}, /* Cluster: {{parent.parent.name}}, Event: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "administer")}}
    {{asMEI parent.parent.manufacturerCode parent.parent.code}}, /* Cluster: {{parent.parent.name}}, Event: {{parent.name}}, Privilege: {{role}} */ \
                        {{else}}
    ERROR: access has unrecognized role/privilege [ Cluster: {{parent.parent.name}}, Event: {{parent.name}} ]
                        {{/if}}
                    {{else}}
    ERROR: access has operation but no role/privilege [ Cluster: {{parent.parent.name}}, Event: {{parent.name}} ]
                    {{/if}}
                {{/if}}
            {{/if}}
        {{/access}}
    {{/zcl_events}}
    {{#last}}
}
    {{/last}}
{{/all_user_clusters}}

{{#all_user_clusters side='server'}}
    {{#first}}
// Parallel array data (cluster, *event*, privilege) for read event
#define GENERATED_ACCESS_READ_EVENT__EVENT { \
    {{/first}}
    {{#zcl_events}}
        {{#access entity="event"}}
            {{#if hasOperation}}
                {{#if (isStrEqual operation "read")}}
                    {{#if hasRole}}
                        {{#if (isStrEqual role "view")}}
    /* Cluster: {{parent.parent.name}}, Event: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "operate")}}
    {{asMEI parent.manufacturerCode parent.code}}, /* Cluster: {{parent.parent.name}}, Event: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "manage")}}
    {{asMEI parent.manufacturerCode parent.code}}, /* Cluster: {{parent.parent.name}}, Event: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "administer")}}
    {{asMEI parent.manufacturerCode parent.code}}, /* Cluster: {{parent.parent.name}}, Event: {{parent.name}}, Privilege: {{role}} */ \
                        {{else}}
    ERROR: access has unrecognized role/privilege [ Cluster: {{parent.parent.name}}, Event: {{parent.name}} ]
                        {{/if}}
                    {{else}}
    ERROR: access has operation but no role/privilege [ Cluster: {{parent.parent.name}}, Event: {{parent.name}} ]
                    {{/if}}
                {{/if}}
            {{/if}}
        {{/access}}
    {{/zcl_events}}
    {{#last}}
}
    {{/last}}
{{/all_user_clusters}}

{{#all_user_clusters side='server'}}
    {{#first}}
// Parallel array data (cluster, event, *privilege*) for read event
#define GENERATED_ACCESS_READ_EVENT__PRIVILEGE { \
    {{/first}}
    {{#zcl_events}}
        {{#access entity="event"}}
            {{#if hasOperation}}
                {{#if (isStrEqual operation "read")}}
                    {{#if hasRole}}
                        {{#if (isStrEqual role "view")}}
    /* Cluster: {{parent.parent.name}}, Event: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "operate")}}
    kMatterAccessPrivilegeOperate, /* Cluster: {{parent.parent.name}}, Event: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "manage")}}
    kMatterAccessPrivilegeManage, /* Cluster: {{parent.parent.name}}, Event: {{parent.name}}, Privilege: {{role}} */ \
                        {{else if (isStrEqual role "administer")}}
    kMatterAccessPrivilegeAdminister, /* Cluster: {{parent.parent.name}}, Event: {{parent.name}}, Privilege: {{role}} */ \
                        {{else}}
    ERROR: access has unrecognized role/privilege [ Cluster: {{parent.parent.name}}, Event: {{parent.name}} ]
                        {{/if}}
                    {{else}}
    ERROR: access has operation but no role/privilege [ Cluster: {{parent.parent.name}}, Event: {{parent.name}} ]
                    {{/if}}
                {{/if}}
            {{/if}}
        {{/access}}
    {{/zcl_events}}
    {{#last}}
}
    {{/last}}
{{/all_user_clusters}}

////////////////////////////////////////////////////////////////////////////////

// clang-format on
