local Scene     = require "core.modules.scenes"
local OptionsMenu  = Scene:extend()

local OptionMenu = require "scenes.menus.options.menu"
local Widgets   = require "scenes.menus.options.widgets"

local gui         = require "game.modules.gui"

function OptionsMenu:new()
  OptionsMenu.super.new(self)

  self.assets:batchImport("scenes.menus.options.assets")
  self:addMenu("main", true)
  self:addSubMenu("video", "Video")
  self:addSubMenu("audio", "Audio")
  --self:addSubMenu("langs", "langs")
  self:addSubMenu("inputs", "Inputs")

  Widgets.Resolution(self, "video")
  Widgets.Switch(self, "video", "fullscreen", "Fullscreen")
  Widgets.Switch(self, "video", "borders", "Borders")
  Widgets.Switch(self, "video", "vsync", "Vsync")

  self:addPlayerMenus()

  --self:setLanguageMenu()

  Widgets.Audio(self, "audio", "sfx", "SFX")
  Widgets.Audio(self, "audio", "music", "Music")

  Widgets.Exit(self, "main")

  self.menusystem.menus["main"]:finalize()
  self.menusystem:switchMenu("main")

  self.menusystem:setSoundFromSceneAssets("mBeep")

  self.keyDetector = {}
  self.keyDetector.widget = nil

  self.borderY = 25
  self.borders = gui.newBorder(424, 30, 8)

  self.timer = 0
end

function OptionsMenu:update(dt)
  self.timer = (self.timer + (30 * dt)) % 128
end

-- MENU FUNCTION
-- Functions that serve the handling of menus

function OptionsMenu:addMenu(name, nobackbutton)
  OptionMenu(self, name)
end

function OptionsMenu:addSubMenu(name, fullname)
  self.menusystem.menus["main"]:addSubMenu(name, fullname)
end

function OptionsMenu:addPlayerMenus()
  for i,v in ipairs(core.input.data) do

    self.menusystem.menus["inputs"]:addSubMenu("player" .. i, "Player " .. i, "inputs")

    local keyList = require "datas.keys"
    for j, key in ipairs(keyList) do
      Widgets.Key(self, i, key)
    end
  end

end

function OptionsMenu:addScene(submenu, scene, fullname)
  Widgets.Dummy(self, submenu, fullname)
end

function OptionsMenu:setLanguageMenu()
  for i,v in ipairs(core.lang.data.available) do
    Widgets.Lang(self, "langs", v)
  end
end

function OptionsMenu:changeKey(widget)
  self.keyDetector.isActive = true
  self.keyDetector.widget = widget
end

function OptionsMenu:keypressed( key )
  if (self.keyDetector.isActive) then
    self.keyDetector.widget:receiveKey( key )
    self.menusystem:activate()
    self.keyDetector.isActive = false
  end
end

function OptionsMenu:draw()
  local w, h = core.screen:getDimensions()
  for i=-1, (w/128) do
    for j=-1,(h/128) do
      self.assets.images["background"]:draw(i*128 + self.timer, j*128 + self.timer)
    end
  end

  love.graphics.draw(self.borders,   0,    self.borderY, 0,  1, -1)
  love.graphics.draw(self.borders,   424, 240 - self.borderY, 0, -1,  1)
end

return OptionsMenu
