local getBookmarks = function (guiPath, bookmarkfile)
  local genBookmarks = {};
  local notFirstLine = false;
  local PARSEC_CONSTANT = 3.0856776E16;
  for line in io.lines(openspace.absPath(bookmarkfile)) do
    if (notFirstLine) then
      local matchstring = "(.-),(.-),(.-),(.-),(.-),(.-),(.-),(.-),(.-),(.-),(.-)$"
      local group, name, globe, lat, lon, altitude, x, y, z, scale, linewidth = line:match(matchstring)

      scale = (scale == "" and 75000 or scale)
      linewidth = (linewidth == "" and 2.0 or tonumber(linewidth))
      group = (group == "" and globe or group)

      local parent = (globe == "" and "Root" or globe)

      local sgn = {
        Identifier = guiPath .. "-" .. name,
        Parent = parent,
        Transform = {
          Scale = {
            Type = "StaticScale",
            Scale = tonumber(scale);
          }, 
          Rotation = {
            Type = "StaticRotation",
            Rotation = {
              -0.05487554,  0.4941095, -0.8676661,
              -0.9938214 , -0.1109906, -0.0003515167,
              -0.09647644,  0.8622859,  0.4971472
            }
          }
        },
        Renderable = {
          Type = "RenderableSphericalGrid",
          Enabled = false,
          Opacity = 0.3,
          Color = { 0.3, 0.84, 1.0},
          LineWidth = linewidth
        },
        GUI = {
          Name = name,
          Path = "/" .. guiPath
        }
      }

      if (group ~= "") then
        sgn.GUI.Path  = sgn.GUI.Path .. "/" .. group
      end

      if (globe == "") then
        sgn.Transform.Translation = {
          Type = "StaticTranslation",
          Position = {
            tonumber(x) * PARSEC_CONSTANT,
            tonumber(y) * PARSEC_CONSTANT,
            tonumber(z) * PARSEC_CONSTANT
          }
        }
      else
        sgn.Transform.Translation = {
          Type = "GlobeTranslation",
          Globe = globe,
          Latitude = tonumber(lat),
          Longitude = tonumber(lon)
        }
        if (altitude == nil) then
          sgn.Transform.Translation.UseHeightMap = true;
        else 
          sgn.Transform.Translation.UseHeightMap = false;
          sgn.Transform.Translation.Altitude = tonumber(altitude);
        end
      end

      table.insert(genBookmarks, sgn);
    else
      notFirstLine = true
    end
  end
  return genBookmarks
end

asset.export("getBookmarks", getBookmarks)
