#include <iostream>
#include <string>

#include "cmsys/FStream.hxx"

#ifdef _WIN32
#  include "cmsys/ConsoleBuf.hxx"
#endif

#ifdef _WIN32
void setEncoding(cmsys::ConsoleBuf::Manager& buf, UINT codepage)
{
  cmsys::ConsoleBuf* cb = buf.GetConsoleBuf();
  if (cb) {
    cb->input_pipe_codepage = codepage;
    cb->output_pipe_codepage = codepage;
    cb->input_file_codepage = codepage;
    cb->output_file_codepage = codepage;
    cb->activateCodepageChange();
  }
}
#endif

int main(int argc, char* argv[])
{
#ifdef _WIN32
  cmsys::ConsoleBuf::Manager consoleOut(std::cout);
#endif
  if (argc <= 2) {
    std::cout << "Usage: testEncoding <encoding> <file>" << std::endl;
    return 1;
  }
  const std::string encoding(argv[1]);
#ifdef _WIN32
  if ((encoding == "UTF8") || (encoding == "UTF-8")) {
    setEncoding(consoleOut, CP_UTF8);
  } else if (encoding == "ANSI") {
    setEncoding(consoleOut, CP_ACP);
  } else if (encoding == "OEM") {
    setEncoding(consoleOut, CP_OEMCP);
  } // else AUTO
#endif
  cmsys::ifstream file(argv[2]);
  if (!file.is_open()) {
    std::cout << "Failed to open file: " << argv[2] << std::endl;
    return 2;
  }
  std::string text((std::istreambuf_iterator<char>(file)),
                   std::istreambuf_iterator<char>());
  std::cout << text;
  return 0;
}
