#ifndef GLOBAL_H
#define GLOBAL_H

#include <QColor>
#include <QCryptographicHash>
#include <QDateTime>
#include <QEventLoop>
#include <QTimer>
#include <map>

#include "NotifyManager.h"

extern QString g_SoftwareVersion;  // 软件版本号

/*******************系统颜色***************************************/
extern QColor g_themeColor;
extern QString g_PushBtnStyle;
extern QString g_PushBtnSelStyle;
extern QString g_ToolBtnStyle;
extern QString g_ToolBtnSelStyle;
/*******************系统颜色***************************************/

/**
 * @brief calCRC16
 * @param cpu8Data
 * @param u16Len
 * @return
 */
extern uint16_t calCRC16(const uint8_t *cpu8Data, uint16_t u16Len);

/**
 * @brief 计算字符串MD5值
 * @param str:字符串
 * @return 字符串MD5值
 */
extern QString calculateMD5(const QString &str);

/**
 * @brief 生成推流地址
 * @param uavID: 飞控ID
 * @param uavName: 飞机型号,默认981cs
 * @param clientID: 客户端ID,0为地面端,1为载荷端。
 * @param pushDomain: 推流域名
 * @param appName
 * @param expireTime: 过期时间(单位是秒),默认1h。
 * @param pushKey: 推流域名配置的鉴权Key
 * @return 返回推流地址
 */
extern QString generatePushURL(int uavID, QString appName = "nmyj",
                               QString pushKey = "ZRjGVcPYGhKib0rdgH",
                               QString uavName = "981cs", int clientID = 0,
                               QString pushDomain = "push.uavideo.cn",
                               long expireTime = 6 * 3600);

/**
 * @brief 生成公司推流平台地址
 * @param uavID:飞控ID
 * @param clientID: 客户端ID,0为地面端,1为载荷端。
 * @param appName:
 * @param uavName:飞机型号,默认981cs
 * @param pushDomain: 推流地址
 * @return
 */
extern QString generatePushURL2(int uavID, QString appName = "nmyj",
                                QString uavName = "981cs", int clientID = 0,
                                QString pushDomain = "182.92.130.23");

/**
 * @brief 生成拉流地址
 * @param uavID: 飞控ID
 * @param appName: app名称
 * @param uavName: 飞机型号,默认981cs
 * @param clientID: 数据推流端ID,0为地面端,1为载荷端。
 * @param pullDomain: 拉流域名
 * @param expireTime: 过期时间(单位是秒),默认1h。
 * @param pullKey: 拉流域名配置的鉴权Key
 * @return 返回拉流地址
 */
extern QString generatePullURL(int uavID, QString appName = "nmyj",
                               QString pullKey = "HDaMVkLnIcr0mGhV8d",
                               QString uavName = "981cs", int clientID = 0,
                               QString pullDomain = "play.uavideo.cn",
                               long expireTime = 6 * 3600);

/**
 * @brief 生成拉流地址,应急厅铁塔平台
 * @param uavID: 飞控ID
 * @param appName: app名称
 * @param uavName: 飞机型号,默认981cs
 * @param clientID: 数据推流端ID,0为地面端,1为载荷端。
 * @param pullDomain: 拉流域名
 * @return 返回拉流地址
 */
extern QString generatePullURL2(int uavID, QString appName = "nmyj",
                                QString uavName = "981cs", int clientID = 0,
                                QString pullDomain = "182.92.130.23");

extern std::map<int, std::string> g_mapAppName;

/**
 * @brief      非阻塞延时
 * @param msec 延时毫秒
 */
void sleepMsec(int msec);

extern NotifyManager *g_notifyManager;

class global {
public:
    global();
};

#endif  // GLOBAL_H