//
//  demoTools.h
//

#pragma once

#include <string>
#include <afx.h>
#include <vector>
#include <sstream>
using namespace std;
const int STRING_LENGTH = 100;//所有对外字符串固定长度
class CTools
{
private:
    CTools(void);
    ~CTools(void);
public:
    static wstring MultiByte2UNICODE(const string& str);
    static string UNICODE2MultiByte(const wstring& wstr);
    static wstring UTF2UNICODE(const string& str);
    static string UNICODE2UTF(const wstring& wstr);
    static int str2num(const string& str);
    static string num2str(int i);
    static HWND str2hwnd(const string& str);
    static void writeIniConfigParam(const CString& sectionConfig, const CString& sectionName, const CString& sectionValue);
    static CString getCurrentPath();
    static void getIniConfigParam(const CString& sectionConfig, const CString& sectionName, CString& sectionValue);
    static vector<string> split(string str, const char del);
    static char* MultiByte2UTF8(const std::string & str);
    static string UTF82MultiByte(const std::string & str);
    static string Hex2Str(const std::vector<unsigned char>& vec);
    static string LL2S(long long data);
    static HWND m_hWndCurDlg;
    static void OutputRetStr(std::string str); //更新界面输出结果，入参utf8
    template<typename T, T _dv = 0> static T stringToType(const std::string &strValue);
    // 显示错误码提示框
    static void ShowErrMsg(int ret, const char* reason);
    // 获取错误码提示语
    static std::string GetErrMsg(int ret);
    // 判断一个字符串是否为手机号
    static bool IsPhoneNumberString(const std::string& phoneNumber);
    // 读取编辑控件的字符串
    static void GetEditValue(char* dst, unsigned int size, const CEdit &edit);
};


// 用于缓存全局变量
class CStaticData
{
private:
    CStaticData(void);
    ~CStaticData(void);

    static string output;  // 用于显示的历史接口回调和通知返回值,utf8格式

public:
    static string GetOutput() { return output; }
    static void AddOutput(string str) { output = output + str + "\r\n"; }
};


template<typename T, T _dv>
inline T CTools::stringToType(const std::string & strValue)
{
    std::stringstream stream;
    stream << strValue;

    T ret = _dv;
    stream >> ret;

    return ret;
}
