#ifndef USER_CERT_PRESENT
#define USER_CERT_PRESENT

#include "type.h"

extern const char *ca_cert;
extern const char *client_cert;
extern const char *client_key;
extern const char *http_header_fmt;
extern const char *json_data;

// 以下为JSON打包函数
char *JSON_data();
void json_initialize();
void json_finish();
void json_new_object();
void json_end_object();
void json_new_array(char *key);
void json_end_array();
void json_new_intValue(char *key, int val);
void json_new_doubleValue(char *key, double val);
void json_new_stringValue(char *key, char *val);
void json_new_boolValue(char *key, uint32_t val);

// 以内为JSON解析函数，只解析最简单的记录（无数组和嵌套，数据类型只支持字符型、整型和浮点型）
#define JSON_FIELD_COUNT    (25)
#define JSON_NAME_LENGTH    (19)
#define JSON_VAL_LENGTH     (29)

#define JSON_TYPE_NULL      (0)
#define JSON_TYPE_INTEGER   (1)
#define JSON_TYPE_FLOAT     (2)
#define JSON_TYPE_STRING    (3)

#pragma pack(push, 1)

typedef struct
{
    char name[JSON_NAME_LENGTH + 1];   // \0
    int type;
    union
    {
        char val[JSON_VAL_LENGTH + 2 + 1]; // \"\"\0
        char s[JSON_VAL_LENGTH + 1];       // \0
		struct
		{
			long          i;
			float         f;
		};
    };
} JSON_field;

#pragma pack(pop)

extern JSON_field JSON_Record[JSON_FIELD_COUNT];
int JSON_Parse_Record(char **src);

#endif
