/// Fake cluster for defining structures for secure channel protocol
///
/// This follows the `4.10.1. Secure Channel Protocol Messages`
/// defined in the Matter specification.
///
/// This is NOT a real cluster.
///
/// Since this is a protocol decoder, the following CUSTOM (non-zap) types
/// Are used as markers for data:
///
/// Protocol decoding paths:
///    protocol_cluster_id
///    protocol_attribute_id
///    protocol_command_id
///    protocol_event_id
///
/// Payloads:
///    cluster_attribute_payload
///    cluster_command_payload
///    cluster_event_payload
///
/// Special types:
///    protocol_binary_data - structures without TLV encoded data
///
client cluster SecureChannelProtocol = 0xFFFF0000 {

  struct SessionParameterStruct {
    optional int32u session_idle_interval = 1;
    optional int32u session_active_interval = 2;
    optional int16u session_active_threshold = 3;
    int16u data_model_revision = 4;
    int16u interaction_model_revision = 5;
    int32u specification_version = 6;
    int16u max_paths_per_invoke = 7;
  }


  struct PBKDFParamRequest {
    octet_string<32> initiator_random = 1;
    int16u initiator_session_id = 2;
    int16u passcode_id = 3;
    boolean has_pbkdf_parameters = 4;
    optional SessionParameterStruct initiator_session_params = 5;
  }

  struct CryptoPBKDFParameterSet {
    int32u iterations = 1;
    octet_string<32> salt = 2; // 16..32 in size
  }

  struct PBKDFParamResponse {
    octet_string<32> initiator_random = 1;
    octet_string<32> responder_random = 2;
    int16u responder_session_id = 3;
    CryptoPBKDFParameterSet pbkdf_parameters = 4;
    optional SessionParameterStruct responder_icd_params = 5;
  }

  struct PasePake1 {
    octet_string pA = 1;
  }

  struct PasePake2 {
    octet_string pB = 1;
    octet_string cB = 2;
  }

  struct PasePake3 {
    octet_string cA = 1;
  }

  struct CaseSigma1 {
    octet_string<32> initiator_random = 1;
    int16u initiator_session_id = 2;
    octet_string<32> destination_id = 3;
    octet_string<65> initiator_eph_pub_key = 4;
    optional SessionParameterStruct initiator_session_params = 5;
    optional octet_string<16> resumption_id = 6;
    optional octet_string initiator_resume_mic = 7;
  }

  struct CaseSigma2 {
    octet_string<32> responder_random = 1;
    int16u responder_sessoion_id = 2;
    octet_string<65> responder_eph_pub_key = 3;
    octet_string encrypted2 = 4;
    optional SessionParameterStruct responder_session_params = 5;
  }

  struct CaseSigma3 {
    octet_string encrypted = 1;
  }

  struct CaseSigma2Resume {
    octet_string<16> resumption_id = 1;
    octet_string<16> sigma2_resume_mic = 2;
    int16u responder_sessoion_id = 3;
    optional SessionParameterStruct responder_session_params = 4;
  }

  // IDs here are based on Protocol opcodes
  //
  // Written here as "attributes" to force code generation
  // to consider these active structures.
  readonly attribute protocol_binary_data msg_counter_sync_request = 0x00;
  readonly attribute protocol_binary_data msg_counter_sync_response = 0x01;
  readonly attribute protocol_binary_data mrp_ack = 0x10;
  readonly attribute PBKDFParamRequest pbkdf_param_request = 0x20;
  readonly attribute PBKDFParamResponse pbkdf_param_response = 0x21;
  readonly attribute PasePake1 pase_pake1 = 0x22;
  readonly attribute PasePake2 pase_pake2 = 0x23;
  readonly attribute PasePake3 pase_pake3 = 0x24;
  readonly attribute CaseSigma1 case_sigma1 = 0x30;
  readonly attribute CaseSigma2 case_sigma2 = 0x31;
  readonly attribute CaseSigma3 case_sigma3 = 0x32;
  readonly attribute CaseSigma2Resume case_sigma2_resume = 0x33;
  readonly attribute protocol_binary_data status_report = 0x40;
  readonly attribute protocol_binary_data icd_checkin = 0x50;
}

/// Fake cluster for defining structures for IM data encoding.
///
/// This follows the `10. Interaction Model Encoding Specification`
/// defined in the Matter specification.
///
/// This is NOT a real cluster.
///
client cluster IMProtocol = 0xFFFF0001 {
  struct AttributePathIB {
    boolean enable_tag_compression = 0;
    optional int64u node_id = 1;
    optional int16u endpoint_id = 2;
    optional protocol_cluster_id cluster_id = 3;
    optional protocol_attribute_id attribute_id = 4;
    optional nullable int16u list_index = 5;
  }

  struct EventPathIB {
    optional int64u node_id = 0;
    optional int16u endpoint_id = 1;
    optional protocol_cluster_id cluster_id = 2;
    optional protocol_event_id event_id = 3;
    boolean is_urgent = 4;
  }

  struct EventFilterIB {
    optional int64u node_id = 0;
    int64u event_min = 1;
  }

  struct ClusterPathIB {
    optional int64u node_id = 0;
    optional int16u endpoint_id = 1;
    optional protocol_cluster_id cluster_id = 2;
  }

  struct DataVersionFilterIB {
    ClusterPathIB path = 0;
    int32u data_version = 1;
  }

  struct StatusResponseMessage {
    int8u status = 0;

    // 10.2.2.2. Context Tag Encoded Action Information
    int8u interaction_model_revison = 0xFF;
  }

  struct ReadRequestMessage {
    optional AttributePathIB attribute_requests[] = 0;
    optional EventPathIB event_requests[] = 1;
    optional EventFilterIB event_filters[] = 2;
    optional boolean fabric_filtered = 3;
    optional DataVersionFilterIB data_version_filters[] = 4;
    optional boolean include_attribution_data = 5;

    // 10.2.2.2. Context Tag Encoded Action Information
    int8u interaction_model_revison = 0xFF;
  }

  struct SubscribeRequestMessage {
    boolean keep_subscriptions = 0;
    int16u min_minterval_floor = 1;
    int16u max_minterval_ceiling = 2;
    optional AttributePathIB attribute_requests[] = 3;
    optional EventPathIB event_requests[] = 4;
    optional EventFilterIB event_filters[] = 5;
    // NOTE: 6 is missing here ...
    boolean fabric_filtered = 7;
    optional DataVersionFilterIB data_version_filters[] = 8;

    // 10.2.2.2. Context Tag Encoded Action Information
    int8u interaction_model_revison = 0xFF;
  }

  struct SubscribeResponseMessage {
    int32u subscription_id = 0;
    // NOTE: 1 missing here
    int16u max_interval = 2;

    // 10.2.2.2. Context Tag Encoded Action Information
    int8u interaction_model_revison = 0xFF;
  }

  enum StatusCodeEnum : ENUM8 {
    kSuccess = 0x0;
    kFailure = 0x01;
    kInvalidSubscription = 0x7d;
    kUnsupportedAccess = 0x7e;
    kUnsupportedEndpoint = 0x7f;
    kInvalidAction = 0x80;
    kUnsupportedCommand = 0x81;
    kInvalidCommand = 0x85;
    kUnsupportedAttribute = 0x86;
    kConstraintError = 0x87;
    kUnsupportedWrite = 0x88;
    kResourceExhausted = 0x89;
    kNotFound = 0x8b;
    kUnreportableAttribute = 0x8c;
    kInvalidDataType = 0x8d;
    kUnsupportedRead = 0x8f;
    kDataVersionMismatch = 0x92;
    kTimeout = 0x94;
    kBusy = 0x9c;
    kUnsupportedCluster = 0xc3;
    kNoUpstreamSubscription = 0xc5;
    kNeedsTimedInteraction = 0xc6;
    kUnsupportedEvent = 0xc7;
    kPathsExhausted = 0xc8;
    kTimedRequestMismatch = 0xc9;
    kFailsafeRequired = 0xca;
    kInvalidInState = 0xcb;
    kNoCommandResponse = 0xcc;
    kWriteIgnored = 0xF0;
  }

  struct StatusIB {
    StatusCodeEnum status = 0;
    int8u cluster_status = 1;
  }

  struct AttributeStatus {
    AttributePathIB path = 0;
    StatusIB status = 1;
  }

  struct AttributionData {
    // NOTE: 0 is missing
    int8u context_information = 1;
    int32u source_context = 2;

    // at-most-one-of {
    optional int64u node_id = 3;
    optional int16u group_id = 4;
    // }

    // at-most-one-of {
    optional int64u epoch_timestamp = 5;
    optional int64u system_timestamp = 6;
    // }

    int8u fabric_index = 0xFE;
  }

  struct AttributeData {
    optional int32u data_version = 0;
    AttributePathIB path = 1;
    cluster_attribute_payload data = 2;
  }

  struct AttributeReportIB {
    AttributeStatus attribute_status = 0;
    AttributeData attribute_data = 1;
  }

  struct EventStatusIB {
    EventPathIB path = 0;
    StatusIB status = 1;
  }

  struct EventDataIB {
    EventPathIB path = 0;
    int64u event_number = 1;
    int8u priority = 2;

    // oneof {
    int64u epoch_timestamp = 3;
    int64u system_timestamp = 4;
    int64u delta_epoch_timestamp = 5;
    int64u delta_system_timestamp = 6;
    //  }

    cluster_event_payload data = 7;

    AttributionData attribution_data = 8;
  }

  struct EventReportIB {
    EventStatusIB event_status = 0;
    EventDataIB event_data = 1;
  }

  struct ReportDataMessage {
    optional int32u subscription_id = 0;
    optional AttributeReportIB attribute_reports[] = 1;
    optional EventReportIB event_reports[] = 2;
    optional boolean more_cunked_messages = 3;
    optional boolean suppress_response = 4;

    // 10.2.2.2. Context Tag Encoded Action Information
    int8u interaction_model_revison = 0xFF;
  }

  struct AttributeDataIB {
    int32u data_version = 0;
    AttributePathIB path = 1;
    cluster_attribute_payload data = 2;
    AttributionData attribution_data = 3;
  }

  struct WriteRequestMessage {
    optional boolean suppres_response = 0;
    boolean timed_request = 1;
    AttributeDataIB write_requests[] = 2;
    optional boolean more_chunked_messages = 3;

    // 10.2.2.2. Context Tag Encoded Action Information
    int8u interaction_model_revison = 0xFF;
  }

  struct AttributeStatusIB {
    AttributePathIB path = 0;
    StatusIB status = 1;
  }

  struct WriteResponseMessage {
    AttributeStatusIB write_responses[] = 0;

    // 10.2.2.2. Context Tag Encoded Action Information
    int8u interaction_model_revison = 0xFF;
  }

  struct CommandPathIB {
    optional int16u endpoint_id = 0;
    optional protocol_cluster_id cluster_id = 1;
    optional protocol_command_id command_id = 2;
  }

  struct CommandDataIB {
    CommandPathIB path = 0;
    optional cluster_command_payload data = 1;
    optional int16u command_ref = 2;

    // at-most-one-of {
    optional SuppliedAttribution supplied_attribution_data = 3;
    optional int16u supplied_attribution_data_repeat = 4;
    // }
  }

  enum SuppliedAttributionContextInformation : enum8 {
     kDefaultClientAction = 0;
     kUserInteraction = 1;
     kClientAutomationRule = 2;
     kClientSchedule = 3;
     kClientTimer = 4;
  }

  struct  SuppliedAttribution {
     SuppliedAttributeContextInformation context_information = 0;
     int32u source_context = 1;
  }

  struct InvokeRequestMessage {
    boolean suppress_response = 0;
    boolean timed_request = 1;
    CommandDataIB invoke_requests[] = 2;

    // 10.2.2.2. Context Tag Encoded Action Information
    int8u interaction_model_revison = 0xFF;
  }

  struct CommandStatusIB {
    CommandPathIB path = 0;
    StatusIB status = 1;
  }

  struct InvokeResponseIB {
    CommandDataIB command = 0;
    CommandStatusIB status = 1;
  }

  struct InvokeResponseMessage {
    boolean suppress_response = 0;
    InvokeResponseIB invoke_responses[] = 1;
    optional boolean more_chunked_messages = 2;

    // 10.2.2.2. Context Tag Encoded Action Information
    int8u interaction_model_revison = 0xFF;
  }

  struct TimedRequestMessage {
    int16u timeout = 0;

    // 10.2.2.2. Context Tag Encoded Action Information
    int8u interaction_model_revison = 0xFF;
  }

  // IDs here are based on Protocol opcodes, defined
  // in 10.2.1 in the matter spec.
  //
  // Written here as "attributes" to force code generation
  // to consider these active structures.
  readonly attribute StatusResponseMessage status_response = 1;
  readonly attribute ReadRequestMessage read_request = 2;
  readonly attribute SubscribeRequestMessage subscribe_request = 3;
  readonly attribute SubscribeResponseMessage subscribe_response = 4;
  readonly attribute ReportDataMessage report_data = 5;
  readonly attribute WriteRequestMessage write_request = 6;
  readonly attribute WriteResponseMessage write_response = 7;
  readonly attribute InvokeRequestMessage invoke_request = 8;
  readonly attribute InvokeResponseMessage invoke_response = 9;
  readonly attribute TimedRequestMessage timed_request = 10;
}

client cluster BdxProtocol = 0xFFFF0002 {
  // IDs here are based on Protocol opcodes, defined
  // in 11.21.3.1  in the matter spec.
  //
  // Written here as "attributes" to force code generation
  // to consider these active structures.
  readonly attribute octet_string send_init = 1;
  readonly attribute octet_string send_accept = 2;

  readonly attribute octet_string receive_init = 4;
  readonly attribute octet_string receive_accept = 5;


  readonly attribute octet_string block_query = 0x10;
  readonly attribute octet_string block = 0x11;
  readonly attribute octet_string block_eof = 0x12;
  readonly attribute octet_string block_ack = 0x13;
  readonly attribute octet_string block_ack_eof = 0x14;
  readonly attribute octet_string block_query_with_skip = 0x15;
}

client cluster UserDirectedCommissioningProtocol = 0xFFFF0003 {
  struct IdentificationDeclarationStruct {
    octet_string<8> instance_name = 1;
  }

  // IDs here are based on Protocol opcodes, defined
  // in 5.3.2 in the matter spec.
  //
  // Written here as "attributes" to force code generation
  // to consider these active structures.
  readonly attribute IdentificationDeclarationStruct identification_declaration = 0;
}