#ifndef RUNNER_UTILS_H_
#define RUNNER_UTILS_H_

#include <string>
#include <vector>

// Creates a console for the process, and redirects stdout and stderr to
// it for both the runner and the Flutter library.
void CreateAndAttachConsole();

// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string
// encoded in UTF-8. Returns an empty std::string on failure.
std::string Utf8FromUtf16(const wchar_t* utf16_string);

// Takes a null-terminated char* encoded in UTF-8 and returns a std::wstring
// encoded in UTF-16. Returns an empty std::wstring on failure.
std::wstring Utf16FromUtf8(const char* utf8_string);

// Convert a wide Unicode string to an UTF8 string
std::string utf8_encode(const std::wstring &wstr);

// Convert an UTF8 string to a wide Unicode String
std::wstring utf8_decode(const std::string &str);

// Gets the command line arguments passed in as a std::vector<std::string>,
// encoded in UTF-8. Returns an empty std::vector<std::string> on failure.
std::vector<std::string> GetCommandLineArguments();

// trims whitespace from the left side of a string
const std::string ltrim(const std::string &s);

// trims whitespace from the right side of a string
const std::string rtrim(const std::string &s);

// trims whitespace from both sides of a string
const std::string trim(const std::string &s);

#endif  // RUNNER_UTILS_H_
