/*
 * qos_monitoring_data.h
 *
 * Contains QoS monitoring related control information.
 */

#ifndef _OpenAPI_qos_monitoring_data_H_
#define _OpenAPI_qos_monitoring_data_H_

#include <string.h>
#include "../external/cJSON.h"
#include "../include/list.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
typedef struct OpenAPI_qos_monitoring_data_s OpenAPI_qos_monitoring_data_t;
#include "qos_monitoring_param_type.h"
#include "reporting_frequency.h"
#include "requested_qos_monitoring_parameter.h"

#ifdef __cplusplus
extern "C" {
#endif

struct OpenAPI_qos_monitoring_data_s {
    char *qm_id;
    OpenAPI_qos_monitoring_param_type_e qos_mon_param_type;
    OpenAPI_list_t *req_qos_mon_params;
    OpenAPI_list_t *rep_freqs;
    bool is_rep_thresh_dl_null;
    bool is_rep_thresh_dl;
    int rep_thresh_dl;
    bool is_rep_thresh_ul_null;
    bool is_rep_thresh_ul;
    int rep_thresh_ul;
    bool is_rep_thresh_rp_null;
    bool is_rep_thresh_rp;
    int rep_thresh_rp;
    bool is_con_thresh_dl_null;
    bool is_con_thresh_dl;
    int con_thresh_dl;
    bool is_con_thresh_ul_null;
    bool is_con_thresh_ul;
    int con_thresh_ul;
    bool is_wait_time_null;
    bool is_wait_time;
    int wait_time;
    bool is_rep_period_null;
    bool is_rep_period;
    int rep_period;
    bool is_notify_uri_null;
    char *notify_uri;
    bool is_notify_corre_id_null;
    char *notify_corre_id;
    bool is_direct_notif_ind;
    int direct_notif_ind;
    bool is_avrg_wndw_null;
    bool is_avrg_wndw;
    int avrg_wndw;
    bool is_rep_thresh_dat_rate_ul_null;
    char *rep_thresh_dat_rate_ul;
    bool is_rep_thresh_dat_rate_dl_null;
    char *rep_thresh_dat_rate_dl;
    OpenAPI_list_t *avl_bitrate_ul_thrs;
    OpenAPI_list_t *avl_bitrate_dl_thrs;
    char *data_coll_app_id;
};

OpenAPI_qos_monitoring_data_t *OpenAPI_qos_monitoring_data_create(
    char *qm_id,
    OpenAPI_qos_monitoring_param_type_e qos_mon_param_type,
    OpenAPI_list_t *req_qos_mon_params,
    OpenAPI_list_t *rep_freqs,
    bool is_rep_thresh_dl_null,
    bool is_rep_thresh_dl,
    int rep_thresh_dl,
    bool is_rep_thresh_ul_null,
    bool is_rep_thresh_ul,
    int rep_thresh_ul,
    bool is_rep_thresh_rp_null,
    bool is_rep_thresh_rp,
    int rep_thresh_rp,
    bool is_con_thresh_dl_null,
    bool is_con_thresh_dl,
    int con_thresh_dl,
    bool is_con_thresh_ul_null,
    bool is_con_thresh_ul,
    int con_thresh_ul,
    bool is_wait_time_null,
    bool is_wait_time,
    int wait_time,
    bool is_rep_period_null,
    bool is_rep_period,
    int rep_period,
    bool is_notify_uri_null,
    char *notify_uri,
    bool is_notify_corre_id_null,
    char *notify_corre_id,
    bool is_direct_notif_ind,
    int direct_notif_ind,
    bool is_avrg_wndw_null,
    bool is_avrg_wndw,
    int avrg_wndw,
    bool is_rep_thresh_dat_rate_ul_null,
    char *rep_thresh_dat_rate_ul,
    bool is_rep_thresh_dat_rate_dl_null,
    char *rep_thresh_dat_rate_dl,
    OpenAPI_list_t *avl_bitrate_ul_thrs,
    OpenAPI_list_t *avl_bitrate_dl_thrs,
    char *data_coll_app_id
);
void OpenAPI_qos_monitoring_data_free(OpenAPI_qos_monitoring_data_t *qos_monitoring_data);
OpenAPI_qos_monitoring_data_t *OpenAPI_qos_monitoring_data_parseFromJSON(cJSON *qos_monitoring_dataJSON);
cJSON *OpenAPI_qos_monitoring_data_convertToJSON(OpenAPI_qos_monitoring_data_t *qos_monitoring_data);
OpenAPI_qos_monitoring_data_t *OpenAPI_qos_monitoring_data_copy(OpenAPI_qos_monitoring_data_t *dst, OpenAPI_qos_monitoring_data_t *src);

#ifdef __cplusplus
}
#endif

#endif /* _OpenAPI_qos_monitoring_data_H_ */

