local colors   = _G.colors
local os       = _G.os
local settings = _G.settings
local term     = _G.term

local bootOptions = {
  { prompt = os.version() },
  { prompt = 'Opus'         , args = { '/sys/boot/opus.boot' } },
  { prompt = 'Opus Shell'   , args = { '/sys/boot/opus.boot', 'sys/apps/shell' } },
}
local bootOption = 2
if settings then
  settings.load('.settings')
  bootOption = tonumber(settings.get('opus.boot_option') or 2) or 2
end

local function startupMenu()
  while true do
    term.clear()
    term.setCursorPos(1, 1)
    print('Select startup mode')
    print()
    for k,option in pairs(bootOptions) do
      print(k .. ' : ' .. option.prompt)
    end
    print('')
    term.write('> ')
    local ch = tonumber(_G.read())
    if ch and bootOptions[ch] then
      return ch
    end
  end
end

local function splash()
  local w, h = term.current().getSize()

  term.setTextColor(colors.white)
  if not term.isColor() then
    local str = 'Opus OS'
    term.setCursorPos((w - #str) / 2, h / 2)
    term.write(str)
  else
    term.setBackgroundColor(colors.black)
    term.clear()
    local opus = {
      'fffff00',
      'ffff07000',
      'ff00770b00 4444',
      'ff077777444444444',
      'f07777744444444444',
      'f0000777444444444',
      '070000111744444',
      '777770000',
      '7777000000',
      '70700000000',
      '077000000000',
    }
    for k,line in ipairs(opus) do
      term.setCursorPos((w - 18) / 2, k + (h - #opus) / 2)
      term.blit(string.rep(' ', #line), string.rep('a', #line), line)
    end
  end

  local str = 'Press any key for menu'
  term.setCursorPos((w - #str) / 2, h)
  term.write(str)
end

term.clear()
splash()

local timerId = os.startTimer(1.5)
while true do
  local e, id = os.pullEvent()
  if e == 'timer' and id == timerId then
    break
  end
  if e == 'char' then
    bootOption = startupMenu()
    if settings then
      settings.set('opus.boot_option', bootOption)
      settings.save('.settings')
    end
    break
  end
end

term.clear()
term.setCursorPos(1, 1)
if bootOptions[bootOption].args then
  os.run(_G.getfenv(1), table.unpack(bootOptions[bootOption].args))
else
  print(bootOptions[bootOption].prompt)
end
