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

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

function Player:new(world, x, y, z, id)
  Player.super.new(self, world, "player", x, y, 0, 16, 12, 24, true)
  self:setGravity(480*2)

  self:init()

  self.action = "normal"

  self.rings = 0
  self.score = 0
end

function Player:init()
  self.charName = game.characters:getActiveCharacter()
  self.assets:addSprite(self.charName, "datas/gamedata/characters/" .. self.charName .. "/sprites")
  self:setSprite(self.charName, 8, 10)
  self:cloneSprite()

  self.emblem     = Emblem(game.characters:getActiveCharacterData(), self.scene)
  self.guiborder = game.gui.newBorder(424, 20, 6)
end

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

  self:basicMovements()

  if self.keys["A"].isPressed and (self.onGround) then
    self.zsp = 280*1.33
  end

  if self.keys["B"].isPressed and (self.onGround) then
    -- Nothing for the moment
  end
end

function Player:basicMovements()

  if self.keys["up"].isDown then
    self.ysp = -160
  end
  if self.keys["down"].isDown then
    self.ysp =  160
  end
  if (self.world.autorun == true) then
    self.xsp = 160
  else
    if self.keys["left"].isDown then
      self.xsp = -160
    end
    if self.keys["right"].isDown then
      self.xsp =  160
    end
  end

end

function Player:collisionResponse(collision)
  if collision.other.type == "collectible" then
    collision.other.owner:getPicked(self)
  end
end

function Player:animationEnded(name)

end

function Player:updateEnd(dt)
  self:setAnimation()
end

function Player:setAnimation()
  local gsp = utils.math.pointDistance(0, 0, self.xsp, self.ysp)
  self:setCustomSpeed(math.abs(gsp) / 12)
  self:setDirection(self.xsp)
  if (self.action == "punching") then
    --the animation system is already active
  else
    if (self.onGround) then
      if (math.abs(self.xsp) > 0) or (math.abs(self.ysp) > 0) then
        self:changeAnimation("walk", false)
      else
        self:changeAnimation("idle", false)
      end
    else
      if (self.zsp) > 0 then
        self:changeAnimation("jump", false)
      else
        self:changeAnimation("fall", false)
      end
    end
  end
end

function Player:setDirection(direction)
  direction = direction or 0
  if direction ~= 0 then
    direction = utils.math.sign(direction)
    self.direction = direction
    self:setSpriteScallingX(direction)
  end
end

function Player:getViewCenter()
  local x, y = Player.super.getViewCenter(self)
  return x, y-16
end

function Player:draw()
  Player.super.draw(self)
end

function Player:drawHUD(id)
  love.graphics.draw(self.guiborder, 0, 20, 0, 1, -1)
  self.emblem:draw(424 - 40, 12)
end

function Player:setRing(value, isRelative)
  if (isRelative == false) then
    self.rings = 0
  end
  self.rings = self.rings + value
end

function Player:setScore(value, isRelative)
  if (isRelative == false) then
    self.score = 0
  end
  self.score = self.score + value
end

return Player
