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.lua' } },
	{ prompt = 'Opus Kiosk'   , args = { '/sys/boot/kiosk.boot' } },
}
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