{{> header}}
package chip.devicecontroller;

import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Optional;

{{! TODO: Use AutoValue for inner classes. }}
public class ChipEventStructs {
{{#zcl_clusters}}
{{#zcl_events}}
public static class {{asUpperCamelCase parent.name}}Cluster{{asUpperCamelCase name}}Event {
{{#zcl_event_fields}}
{{! TODO: This uses the vague type List<Object> for some list types. }}
public {{asJavaType type null parent.parent.name includeAnnotations=true}} {{asLowerCamelCase (asSymbol name)}};
{{/zcl_event_fields}}

  public {{asUpperCamelCase parent.name}}Cluster{{asUpperCamelCase name}}Event(
  {{#zcl_event_fields}}
    {{#not_first}}, {{/not_first}}{{asJavaType type null parent.parent.name includeAnnotations=true}} {{asLowerCamelCase (asSymbol name)}}
  {{/zcl_event_fields}}) {
    {{#zcl_event_fields}}
    this.{{asLowerCamelCase (asSymbol name)}} = {{asLowerCamelCase (asSymbol name)}};
    {{/zcl_event_fields}}
  }

  @Override
  public String toString() {
    StringBuilder output = new StringBuilder();
    output.append("{{asUpperCamelCase parent.name}}Cluster{{asUpperCamelCase name}}Event {\n");
    {{#zcl_event_fields}}
    {{! TODO: Print more descriptive types for optional, nullable, array, and struct. }}
    output.append("\t{{asLowerCamelCase name}}: ");
    {{#if isArray}}
    output.append({{asLowerCamelCase name}});
    {{else if (isOctetString type)}}
    {{#if isOptional}}
    output.append({{asLowerCamelCase name}}.isPresent() ? Arrays.toString({{asLowerCamelCase name}}.get()) : "");
    {{else}}
    output.append(Arrays.toString({{asLowerCamelCase name}}));
    {{/if}}
    {{else}}
    output.append({{asLowerCamelCase name}});
    {{/if}}
    output.append("\n");
    {{/zcl_event_fields}}
    output.append("}\n");
    return output.toString();
  }
}

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