/*
 * @Description: 
 * @Version: 1.0
 * @Autor: lishengyin
 * @Date: 2022-02-23 09:31:32
 * @LastEditors: lishengyin
 * @LastEditTime: 2022-08-02 16:23:49
 */
#ifndef __HTTPCLIENT_H_
#define __HTTPCLIENT_H_

#include <iostream>
#include <time.h>
#include <ctime>

#include "Util/logger.h"
#include "Util/NoticeCenter.h"
#include "Poller/EventPoller.h"
#include "Util/SqlPool.h"
#include "Network/TcpClient.h"
#include "Poller/Timer.h"
#include "TCPClient.hpp"
#include <httplib.h>
#include "Notices.h"
#include  "md5.h"

// dataType
#include "NettyHttpResultMsg.h"
#include "NettyHttpToken.h"
#include "NettyHttpNull.h"
#include "NettyExpelDevInfo.h"
#include "NettyHttpDicCode.h"

using namespace std;
namespace gsd{
    class HttpClient
    {
    private:
        // 用户名
        std::string account;
        std::string pwd = "sunwin20200507";

        // 固定16位私钥
        std::string privateKey = "mwWAH2eUAAHodlRt";

        // authToken
        std::string authToken = "";
        // refreshToken
        std::string refreshToken = "";
    public:
        HttpClient() {}
        ~HttpClient() {}

        /**
        * @description: 初始化
        * @param {string} account
        * @param {string} url
        * @param {int} port
        * @return {*}
        */        
        int32_t Init(std::string account,std::string url, int port);

        /**
        * @description: 创建对象
        * @param {*}
        * @return {*}
        */        
        static std::shared_ptr<HttpClient> CreateNew();

        /**
        * @description: 登录
        * @param {*}
        * @return {*}
        */        
        int32_t LoginNetty();

        /**
        * @description: 判断是否获取到Token
        * @param {*}
        * @return {*}
        */        
        bool alive();

        /**
        * @description: 获取时间
        * @param {char} *ctime
        * @return {*}
        */        
        static void getDataTime(char *ctime);

        /**
        * @description: 获取驱鸟设备信息
        * @param {*}
        * @return {*}
        */    
        int32_t getExpelInfo(std::string simCode, NettyHttpResultMsg<NettyExpelDevInfo,NettyHttpNull>& nettyHttpResultMsg);

        /**
        * @description: 获取派尔云的设备数据
        * @param {*}
        * @return {*}
        */    
        int32_t getHttpDicCode(std::string dictCode,NettyHttpResultMsg<NettyHttpDicCode,NettyHttpNull>& nettyHttpResultMsg);
    };
};


#endif