local HUD = Object:extend()

local gui         = require "game.modules.gui"
local TweenManager = require "game.modules.tweenmanager"

local PLAYER_HUD_HIDDEN   = 240+64
local PLAYER_HUD_VISIBLE  = 240-44
local PLAYER_MESSAGE = 240 - 24

function HUD:new(turns)
  self.turns = turns
  self.scene = turns.scene
  self.world = self.scene.world
  self.assets = self.scene.assets

  self.frame  = gui.newBorder(424, 30, 4)
  self.tweens = TweenManager(self)

  self.playerHUDPosition = PLAYER_HUD_HIDDEN
  self.battlerCursor = self.turns.turns.current

  self.message = "Test de message"
  self.messageOpacity = 0
end

function HUD:showMessage(message)
  self.message = message
  self.messageOpacity = 1
  self.tweens:newTween(0, 0.2, {messageOpacity = 1}, 'inOutCubic')
  self.tweens:newTween(1, 0.2, {messageOpacity = 0}, 'inOutCubic')
end

function HUD:update(dt)
  self.tweens:update(dt)
end

function HUD:movePlayerHUD(beginBattle)
  if (beginBattle) then
    self.tweens:newTween(0, 0.4, {playerHUDPosition = PLAYER_HUD_VISIBLE}, 'inCubic')
  else
    self.tweens:newTween(0, 0.4, {playerHUDPosition = PLAYER_HUD_HIDDEN}, 'inCubic')
  end
end

function HUD:moveBattleCursor(moveCursorTo)
  self.tweens:newTween(0, 0.2, {battlerCursor = moveCursorTo}, 'inCubic')
end

function HUD:getPlayerHUDPosition()
  return self.playerHUDPosition
end

function HUD:draw()
  local x, y = 4, 5

  love.graphics.draw(self.frame, 0, 24, 0, 1, -1)
  self.assets.images["hudturn"]:draw(x, y)
  self.assets.fonts["hudnbrs"]:set()
  local turnnbr = self.turns.turns.number
  if (turnnbr < 10) then
    turnnbr = "0" .. turnnbr
  end
  love.graphics.print(turnnbr, x + 33, y + 1)

  for i, action in ipairs(self.turns.actionList) do
    if action.fighter:canFight() then
      action.fighter:drawIcon(76 + (i-1)*(20), 5)
    else
      self:drawEmptyIcon(76 + (i-1)*(20), 5)
    end
  end
  local cursorx = (self.battlerCursor-1) * 20 + 76

  if #self.turns.actionList > 0 then
    self.assets.images["menucursor"]:draw(cursorx, 5, math.rad(90), 1, 1, 4, 16)
  end

  love.graphics.setColor(0,0,0, 0.5 * self.messageOpacity)
  love.graphics.rectangle("fill", 0, PLAYER_MESSAGE, 424, 16)
  if (self.messageOpacity > 0) then
    self.assets.fonts["small"]:setColor(1,1,1, self.messageOpacity)
    self.assets.fonts["small"]:draw(self.message, 424/2, PLAYER_MESSAGE - 1, -1, "center")
    self.assets.fonts["small"]:setColor(1,1,1, 1)
  end
  utils.graphics.resetColor()
end

function HUD:drawEmptyIcon(x, y)
  local outlineLight = 0.15
  love.graphics.circle("fill", x + 8, y + 8, 2, 8)
  love.graphics.setColor(outlineLight, outlineLight, outlineLight, 1)
  love.graphics.circle("line", x + 8, y + 8, 2, 8)
  utils.graphics.resetColor()
end

return HUD
