#ifndef ZCPPWIN_TOOL_H
#define ZCPPWIN_TOOL_H
#include <string>
#include <filesystem>
#if _WIN32
#include <Windows.h>
#endif
#include "ztool_lib_macro.h"

// WINDOWS独享
namespace Z {
#if _WIN32
ZTOOL_API std::wstring HResultToWString(HRESULT hr);

#endif

}


// 字符串转换(UTF8 - WSTRING)
namespace Z {
#if _WIN32

ZTOOL_API std::string wstring_to_u8(const std::wstring &wstr);
ZTOOL_API std::wstring u8_to_wstring(const std::string &u8str);

#endif
}

// windows 文件操作相关
namespace Z {
#if _WIN32
ZTOOL_API std::filesystem::path get_module_path();
ZTOOL_API std::filesystem::path get_module_dir();
#endif

}

// 随机数
namespace Z {
class ZTOOL_API Random {
public:
    Random() = delete;
    // 产生[min,max]的随机整数
    static int Get(int min, int max);
    // 产生[min,max)的随机小数
    static float Get(float min, float max);
    // 产生[min,max)的随机小数
    static double Get(double min, double max);
    // 重新产生随机种子
    static void GenerateSequence();
    // 重新产生固定种子
    static void GenerateSequence(uint32_t seed);

private:
    static bool bInitialized;
    static unsigned int m_seed;
    static void *m_gen;

    static void InitOnce();
    static void GenSequence();
    static void GenSequence(uint32_t seed);
    static void CleanUp();

};
}

// 其他
namespace Z {
ZTOOL_API void print_obj_memory(const void *obj, size_t len);
}


#endif //ZCPPWIN_TOOL_H
