#include "Enums.hpp"

namespace OverTheWire::Transports::Socket::Enums {

#define ENUM_VALUE(x) exports.Set(#x, Napi::Number::New(env, x))
#define ENUM_VALUE_MANUAL(x, y) exports.Set(#x, Napi::Number::New(env, y))

#ifdef _WIN32
#include "Windows.cpp"
#elif defined(__linux__) || defined(__FreeBSD__)
#include "Linux.cpp"
#else
#include "MacOS.cpp"
#endif

Napi::Object InitPorts(Napi::Env env, Napi::Object exports) {
  /*
  ENUM_VALUE_MANUAL(IPPORT_ECHO, 7);
  ENUM_VALUE_MANUAL(IPPORT_DISCARD, 9);
  ENUM_VALUE_MANUAL(IPPORT_SYSTAT, 11);
  ENUM_VALUE_MANUAL(IPPORT_DAYTIME, 13);
  ENUM_VALUE_MANUAL(IPPORT_NETSTAT, 15);
  ENUM_VALUE_MANUAL(IPPORT_FTP, 21);
  ENUM_VALUE_MANUAL(IPPORT_TELNET, 23);
  ENUM_VALUE_MANUAL(IPPORT_SMTP, 25);
  ENUM_VALUE_MANUAL(IPPORT_TIMESERVER, 37);
  ENUM_VALUE_MANUAL(IPPORT_NAMESERVER, 42);
  ENUM_VALUE_MANUAL(IPPORT_WHOIS, 43);
  ENUM_VALUE_MANUAL(IPPORT_MTP, 57);
  ENUM_VALUE_MANUAL(IPPORT_TFTP, 69);
  ENUM_VALUE_MANUAL(IPPORT_RJE, 77);
  ENUM_VALUE_MANUAL(IPPORT_FINGER, 79);
  ENUM_VALUE_MANUAL(IPPORT_TTYLINK, 87);
  ENUM_VALUE_MANUAL(IPPORT_SUPDUP, 95);
  ENUM_VALUE_MANUAL(IPPORT_EXECSERVER, 512);
  ENUM_VALUE_MANUAL(IPPORT_LOGINSERVER, 513);
  ENUM_VALUE_MANUAL(IPPORT_CMDSERVER, 514);
  ENUM_VALUE_MANUAL(IPPORT_EFSSERVER, 520);
  ENUM_VALUE_MANUAL(IPPORT_BIFFUDP, 512);
  ENUM_VALUE_MANUAL(IPPORT_WHOSERVER, 513);
  ENUM_VALUE_MANUAL(IPPORT_ROUTESERVER, 520);
  ENUM_VALUE_MANUAL(IPPORT_RESERVED, 1024);
  ENUM_VALUE_MANUAL(IPPORT_USERRESERVED, 5000);
  */

  return exports;
};


Napi::Object Init(Napi::Env env, Napi::Object exports) {
  InitPorts(env, exports);
  InitSystemLocal(env, exports);
  return exports;
}

#undef ENUM_VALUE
#undef ENUM_VALUE_MANUAL

};
