local gui = {}

local barborder = love.graphics.newImage("assets/gui/barborder.png")

function gui.newBorder(width, height, middlePosition)
  local tileset   = love.graphics.newImage("assets/gui/borders.png")
  local tilequad  = {}
  local w, h = tileset:getDimensions()
  tilequad[1]     = love.graphics.newQuad(0, 0,  20, 20, w, h)
  tilequad[2]     = love.graphics.newQuad(20, 0, 20, 20, w, h)
  tilequad[3]     = love.graphics.newQuad(40, 0, 20, 20, w, h)
  tilequad[4]     = love.graphics.newQuad(60, 0, 20, 20, w, h)

  local canvas = love.graphics.newCanvas(width, height)

  love.graphics.setCanvas(canvas)
  utils.graphics.resetColor()

  local height  = math.ceil(height / 20)
  local width   = math.ceil(width  / 20)

  for i=1, width do
    if i < middlePosition then
      love.graphics.draw(tileset, tilequad[1], (i-1) * 20, 0)
    elseif (i == middlePosition) then
      love.graphics.draw(tileset, tilequad[2], (i-1) * 20, 0)
    else
      love.graphics.draw(tileset, tilequad[3], (i-1) * 20, 0)
    end

    if height > 1 then
      for j = 2, height do
        love.graphics.draw(tileset, tilequad[4], (i-1) * 20, (j-1) * 20)
      end
    end
  end

  love.graphics.setCanvas( )

  local imagedata = canvas:newImageData()
  local texture   = love.graphics.newImage( imagedata )
  imagedata:release()
  canvas:release()

  return texture
end

function gui.newChoiceBack(approximateWidth)
  local asset   = love.graphics.newImage("assets/gui/attacklist.png")
  local sw, sh  = asset:getDimensions()
  local startAsset  = love.graphics.newQuad(0, 0, 21, sh, sw, sh)
  local midAsset    = love.graphics.newQuad(21, 0, 12, sh, sw, sh)
  local endAsset    = love.graphics.newQuad(sw-25, 0, 25, sh, sw, sh)

  local iterations = math.floor((approximateWidth / 12) - 4)
  local width = (iterations * 12)
  local height = 16
  local canvasWidth = width + 21 + 25

  local canvas = love.graphics.newCanvas(canvasWidth, height)

  love.graphics.setCanvas(canvas)

  love.graphics.draw(asset, startAsset, 0, 0)
  love.graphics.draw(asset, endAsset, 21 + width, 0)

  for i=1, (iterations) do
    love.graphics.draw(asset, midAsset, 21 + ((i-1)*12), 0)
  end

  love.graphics.setCanvas( )

  local imagedata = canvas:newImageData()
  local texture   = love.graphics.newImage( imagedata )
  imagedata:release()
  canvas:release()

  return texture
end

function gui.drawBar(x, y, width, height)
  if (width > 0) then
    local height  = height or 7
    core.screen:setScissor(x, y, width, height)
    love.graphics.draw(barborder, x, y)
    local barwidth = math.max(width-14, 0)
    love.graphics.rectangle("fill", x+7, y, barwidth, height)
    love.graphics.draw(barborder, x+barwidth+7, y, 0, -1, -1, 7, 7)
    core.screen:resetScissor( )
  end
end

function gui.newTextBox(filename, width, height)
  local baseimage = love.graphics.newImage(filename)
  local quad = {}
  quad[1] = love.graphics.newQuad(00, 00, 8, 8, 24, 24)
  quad[2] = love.graphics.newQuad(00, 08, 8, 8, 24, 24)
  quad[3] = love.graphics.newQuad(00, 16, 8, 8, 24, 24)
  quad[4] = love.graphics.newQuad(08, 00, 8, 8, 24, 24)
  quad[5] = love.graphics.newQuad(08, 08, 8, 8, 24, 24)
  quad[6] = love.graphics.newQuad(08, 16, 8, 8, 24, 24)
  quad[7] = love.graphics.newQuad(16, 00, 8, 8, 24, 24)
  quad[8] = love.graphics.newQuad(16, 08, 8, 8, 24, 24)
  quad[9] = love.graphics.newQuad(16, 16, 8, 8, 24, 24)
  local canvas  = love.graphics.newCanvas(width, height)

  love.graphics.setCanvas( canvas )


  for i=1, math.floor(width/8) do
    if (i == 1) then
      -- first line
      for j=1, math.floor(height/8) do
        if j == 1 then
          love.graphics.draw(baseimage, quad[1], (i-1)*8, (j-1)*8)
        elseif j == math.floor(height/8) then
          love.graphics.draw(baseimage, quad[3], (i-1)*8, (j-1)*8)
        else
          love.graphics.draw(baseimage, quad[2], (i-1)*8, (j-1)*8)
        end
      end
    elseif (i == math.floor(width/8)) then
      -- last line
      for j=1, math.floor(height/8) do
        if j == 1 then
          love.graphics.draw(baseimage, quad[7], (i-1)*8, (j-1)*8)
        elseif j == math.floor(height/8) then
          love.graphics.draw(baseimage, quad[9], (i-1)*8, (j-1)*8)
        else
          love.graphics.draw(baseimage, quad[8], (i-1)*8, (j-1)*8)
        end
      end
    else
      -- middle lines
      for j=1, math.floor(height/8) do
        if j == 1 then
          love.graphics.draw(baseimage, quad[4], (i-1)*8, (j-1)*8)
        elseif j == math.floor(height/8) then
          love.graphics.draw(baseimage, quad[6], (i-1)*8, (j-1)*8)
        else
          love.graphics.draw(baseimage, quad[5], (i-1)*8, (j-1)*8)
        end
      end
    end
  end

  love.graphics.setCanvas( )

  local imagedata = canvas:newImageData()
  local texture   = love.graphics.newImage( imagedata )
  imagedata:release()
  canvas:release()
  return texture
end


return gui
