#pragma once
#include <string>

namespace strUtil
{
	// удаление заданного символа с обоих концов строки
	std::string trim(const std::string &str, const char trim_char = L' ');
	std::wstring trim(const std::wstring &str, const wchar_t trim_char = L' ');
	// удаление заданного символа в начале строки
	std::string trimLeft(const std::string &str, const char trim_char = L' ');
	std::wstring trimLeft(const std::wstring &str, const wchar_t trim_char = L' ');
	// удаление заданного символа в конце строки
	std::string trimRight(const std::string &str, const char trim_char = L' ');
	std::wstring trimRight(const std::wstring &str, const wchar_t trim_char = L' ');
	// замена всех символов src в строке на символы dst
	std::string replaceChar(const std::string &str, const char src, const char dst);
	std::wstring replaceChar(const std::wstring &str, const wchar_t src, const wchar_t dst);
	// замена всех символов, входящих в src в строке на символы dst
	std::string replaceChars(const std::string &str, const std::string &src, const char dst);
	std::wstring replaceChars(const std::wstring &str, const std::wstring &src, const wchar_t dst);
	// преобразование регистра, сделать все буквы большими
	std::string strToUpper(const std::string &str);
	std::wstring strToUpper(const std::wstring &str);
	// преобразование регистра, сделать все буквы маленькими
	std::string strToLower(const std::string &str);
	std::wstring strToLower(const std::wstring &str);
	// сокращение строки до заданной длины.
	std::string CropStr(const std::string &str, const size_t len);
	std::wstring CropStr(const std::wstring &str, const size_t len);

	// сравнение строк без учёта регистра
	bool equalNoCase(const std::string &a, const std::string &b);
	bool equalNoCase(const std::wstring &a, const std::wstring &b);

	// функции для конвертирования wstring <-> string
	std::wstring s2ws(const std::string &str);
	std::string ws2s(const std::wstring &wstr);
	// а это транзитные функции для конвертирования wstring <-> string
#if defined(_WIN32)
	std::wstring _t_s2ws(const std::_tstring &str);
	std::_tstring _t_ws2s(const std::wstring &wstr);
#else
	std::wstring _t_s2ws(const std::string &str);
	std::string _t_ws2s(const std::wstring &wstr);
#endif

	fs::path makePath(const std::string &str);
	fs::path makePath(const std::wstring &wstr);
}
