if (not(ide.config.path.luxinia2 and 
        wx.wxFileExists(ide.config.path.luxinia2..'luajit.exe'))) then 
  return 
end

return {
  name = "Luxinia2",
  description = "Luxinia2",
  api = {"baselib","cg30","cggl30","glfw3","glewgl","assimp20","luxmath","luxgfx","luxscene","luajit2",},

  finitclient = function(self)
    if (not CommandLineRunning(self:fuid(wfilename))) then return end
    local init = dofile(ide.config.path.luxinia2.."/../comserver/client.lua")
    local fenv = {}
    setmetatable(fenv,{__index = _G})
    fenv.print = function(...) DisplayOutput(...); DisplayOutput("\n"); end

    setfenv(init,fenv)
    local client = init()

    self.fclient = client
    return client
  end,

  frun = function(self,wfilename,rundebug)
    local luxdir = ide.config.path.luxinia2
    local projdir = ide.config.path.projectdir
    assert(projdir and projdir:len()>0,"no project directory")
    local basedir = luxdir
    local startfile = projdir.."/main.lua"
    local startargs = " -e "..startfile

    if (CommandLineRunning(self:fuid(wfilename))) then
      if (not self.fclient) then
        self:finitclient()
      end
      -- try to communicate with server
      self.fclient("dofile([["..wfilename:GetFullPath().."]])")
      return
    end

    self.fclient = nil
    local fname = wfilename:GetFullName()
    local args = (fname and (" -f "..fname) or "")

    if rundebug then
      DebuggerAttachDefault({
          basedir=basedir,
          startfile=startfile,
          run=true, noshell=true,}
      )
      local editorDir = string.gsub(ide.editorFilename:gsub("[^/\\]+$",""),"\\","/")
      script = ""..
      "package.path=package.path..';"..editorDir.."lualibs/?/?.lua';"..
      "require 'mobdebug'; io.stdout:setvbuf('no'); mobdebug.start('" .. wx.wxGetHostName().."',"..ide.debugger.portnumber..")"

      args = args..' -es "'..script..'"'..startargs
    else
      args = " -s "..args..startargs
    end

    local jitargs = ide.config.luxinia2jitargs
    jitargs = jitargs or ""
    local cmd = 'luajit.exe '..jitargs..' ../main.lua '..args


    local pid = CommandLineRun(cmd,ide.config.path.luxinia2,true,true,nil,self:fuid(wfilename),
      function()
        ShellSupportRemote(nil)
        if (rundebug) then
          DebuggerStop()
        end
      end)
    
    if(not pid) then return end

    if not rundebug then
      local client = self:finitclient()
      ShellSupportRemote(client,self:fuid(wfilename))
    end
    
    return pid
  end,
  fuid = function(self,wfilename) return "luxinia2 "..(ide.config.path.projectdir or "") end,
  fprojdir = function(self,wfilename)
    local path = GetPathWithSep(wfilename)
    filepath = wx.wxFileName(path)

    while ((not wx.wxFileExists(path.."main.lua")) and (filepath:GetDirCount() > 0)) do
      filepath:RemoveDir(filepath:GetDirCount()-1)
      path = GetPathWithSep(filepath)
    end

    return path:sub(0,-2)
  end,
  hasdebugger = true,
}
