#ifndef ToWeb_H_
#define ToWeb_H_

#include "json/json.h"
#include "httplib.h"
#include "AppCommon.h"

namespace ai_matrix
{
    class ToWeb final
    {
    public:
        static ToWeb *getins();

        std::string webToken; //授权信息

        HttpServerConfig httpConfig_;

        void setConfig(const HttpServerConfig &httpConfig);

        bool getToken();
        // 列车信息提交http接口
        bool upWeb(const Json::Value &jvRequest, int retransmission = 0);
        // 上传车号识别状态
        bool upDeviceStatus(const Json::Value &jvRequest, int retransmission = 0);
        // 获取火车状态（仅程序运行时运行一次）
        bool getTrainStatus(const std::string &strPoundNo, Json::Value &jvResponse, int retransmission = 0);
    private:
        ToWeb() = default;
        ToWeb(const ToWeb &) = delete;
        ToWeb(ToWeb &&) = delete;
        ToWeb &operator=(const ToWeb &) = delete;
        ToWeb &operator=(ToWeb &&) = delete;
        ~ToWeb() = default;

        //定义一个嵌套类，负责释放内存，操作系统自动完成，不用担心内存泄露
        class GarbageCollector
        {
        public:
            ~GarbageCollector()
            {
                if (ToWeb::ins)
                {
                    delete ToWeb::ins;
                    ToWeb::ins = nullptr;
                }
            }
        };

        static GarbageCollector gc;
        static ToWeb *ins;
        static std::mutex mx; //锁，保证线程安全
        
    };
}

#endif