#include "nan.h"
#include <Shlwapi.h>
#include <Tchar.h>

using namespace v8;

NAN_METHOD(getDefaultApplication) {
  Nan::HandleScope();

  //printf("getDefaultApplication\n");

  if (info.Length() != 1)
  {
    return Nan::ThrowError("Invalid number of arguments");
  }

  std::string foo = "";

  if (info[0]->IsString()) {
    String::Utf8Value str(info[0]->ToString());
    foo = "." + std::string(*str);

    if (foo != "") {
      TCHAR buf[1024];
      DWORD sz = sizeof(buf) / sizeof(TCHAR);
      HRESULT result = AssocQueryString(ASSOCF_INIT_DEFAULTTOSTAR, ASSOCSTR_FRIENDLYAPPNAME, foo.c_str(), NULL, buf, &sz);

      if (result == S_OK && _tcscmp(buf, _T("Pick an application")) != 0) {
        //printf("getDefaultApplication = %s\n", buf);
        Nan::MaybeLocal<String> resultString = Nan::New(buf);
        info.GetReturnValue().Set(resultString.ToLocalChecked());
        return;
      }
    }
  }
  //return nil;
  info.GetReturnValue().Set(Nan::New("").ToLocalChecked());
  //printf("getDefaultApplication = NOT FOUND\n");

}


NAN_MODULE_INIT(init) {
  Nan::Set(target,
    Nan::New("getDefaultApplication").ToLocalChecked(),
    Nan::GetFunction(Nan::New<FunctionTemplate>(getDefaultApplication)).ToLocalChecked());

}

NODE_MODULE(LaunchServices, init)
