class = require "libs/middleclass"
Timer = require "libs/hump/timer"
require "input"
require "color"
require "room"
require "shaders"
require "debug_helpers"

function love.load()
	_initDefaults()
	_initGridVars()
	loadSprites()

	gameCanvas = love.graphics.newCanvas()
	finalCanvas = love.graphics.newCanvas()

	inputTimer = Timer.new()

	currentRoom = Room:new{
		player = {
			red = {x = 3, y = 5},
			green = {x = 4, y = 3},
			blue = {x = 3, y = 10}
		}
	}
end

function love.update(dt)
	Input:handler()

	currentRoom:update()
end

function love.draw()
	gameCanvas:clear()
	finalCanvas:clear()

	love.graphics.setCanvas(gameCanvas)
	love.graphics.setBlendMode("screen")
	currentRoom:draw()

	love.graphics.setCanvas(finalCanvas)

	local scaleCoefficient = .93
	local samples = 7
  	
  	love.graphics.push()

	for i = 1, samples do
		local c = 65 / (i * 1.75)
		love.graphics.setColor(c, c, c)
		love.graphics.scale(scaleCoefficient, scaleCoefficient)
		love.graphics.translate((width / 2 - (width * scaleCoefficient) / 2) + 2, (width / 2 - (height * scaleCoefficient) / 2) + 2)
		love.graphics.draw(gameCanvas, 0, 0)
	end

	love.graphics.pop()
	love.graphics.setColor(255, 255, 255)
	love.graphics.draw(gameCanvas, 0, 0)
	love.graphics.setCanvas()

	pixelate:send("seed", math.random())
	pixelate:send("zoom", .2)
	love.graphics.setShader(pixelate)
	love.graphics.draw(finalCanvas, 0, 0)
end

function love.keypressed(key)
	if Input.isPlayerMove(key) then
		currentRoom:movePlayer(key)
	elseif Input.isPlayerSwitch(key) then
		local c = Input.playerColor(key)
		currentRoom:switchPlayer(c)
	end
end

function _initDefaults()
	--set filter
	love.graphics.setDefaultFilter("linear", "nearest")
	
	--set global width / height variables
	width = love.graphics.getWidth()
	height = love.graphics.getHeight()
	if width > height then
		width = height
	else
		height = width
	end

	--set randomseed
	math.randomseed(os.time())
end

function _initGridVars()
	gridWidth, gridHeight = 11, 11
	drawScale = width / gridWidth / 16
end

function createCanvases()

end

function loadSprites()
	playerSprite = love.graphics.newImage("art/player.png")
	wallSprite = love.graphics.newImage("art/static_wall.png")
	boxSprite = {
		red = love.graphics.newImage("art/wall_r.png"),
		green = love.graphics.newImage("art/wall_g.png"),
		blue = love.graphics.newImage("art/wall_b.png")
	}
end