local cwd  = (...):gsub('%.player$', '') .. "."
local Parent = require(cwd .. "parent")
local Player = Parent:extend()

local Emblem = require "game.modules.gui.emblem"

local TweenManager = require "game.modules.tweenmanager"

function Player:new(world, x, y, id)
  Player.super.new(self, world, "player", x, y, 16, 16, true)
  self.charset:addTexture("perso")
  self.active = game.characters:getActiveCharacterData()

  self.emblems = {}
  for i, name in ipairs(game.characters.team) do
    game.characters:loadSprite(self.assets, name)
    self.emblems[i] = Emblem(game.characters.list[name], self.scene)
  end

  self.activeVisible = game.characters.active
  self.canChangeActive = true

  self.tweens = TweenManager(self)
end

function Player:isMoving()
  return ((math.abs(self.ysp) > 0.01) or (math.abs(self.xsp) > 0.01))
end

function Player:updateStart(dt)
  self.xfrc, self.yfrc = 480*3, 480*3

  if self.keys["up"].isDown then
    self.ysp = -120
    self.charDir = "up"
  end
  if self.keys["down"].isDown then
    self.ysp =  120
    self.charDir = "down"
  end
  if self.keys["left"].isDown then
    self.xsp = -120
    self.charDir = "left"
  end
  if self.keys["right"].isDown then
    self.xsp =  120
    self.charDir = "right"
  end

  if self.keys["select"].isPressed and self.canChangeActive then
    game.characters:setActiveCharacter()
    self.canChangeActive = false
    self.tweens:newTimer(0.3, "changeCharacter")
    self.tweens:newTween(0, 0.3, {activeVisible = self.activeVisible + 1}, "inQuad")
  end

  self.tweens:update(dt)
end

function Player:timerResponse(response)
  if (response == "changeCharacter") then
    self.canChangeActive = true
    self.activeVisible = game.characters.active
    self.active = game.characters:getActiveCharacterData()
  end
end

function Player:draw()
  if (self:isMoving()) then
    self.charset:draw(self.active.data.charset, self.active.data.charId, self.charDir, self.x, self.y)
  else
    self.charset:drawStanding(self.active.data.charset, self.active.data.charId, self.charDir, self.x, self.y)
  end
end

function Player:drawHUD(id)
  --love.graphics.print(id .. " test", 4, 4)
  self:drawEmblems(self.scene:getEmblemsPosition(), 24)
end

function Player:drawEmblems(x, y)
for i,emblem in ipairs(self.emblems) do
  local angle = ((i-self.activeVisible) * (360/#self.emblems)) - 90
  local rad = math.rad(angle)
  local emblemX, emblemY = utils.math.lengthdir(18, rad)
  emblem:draw(x + emblemX, y + emblemY)
end

end

return Player
