class Player {
	constructor(x, y, direction) {
		this.canvasX = x
		this.canvasY = y

		this.direction = direction

		this.spriteWidth = spriteSize
		this.spriteHeight = spriteSize * 2

		this.animationCycle = [0, 1, 0, 2]
		this.animationCycleIndex = 0
		this.spriteMapXAnimationOffset = 0

		this.directionSpriteYMap = {
			'down': 2,
			'right': 4,
			'up': 6,
			'left': 8,
		}
	}

	move(direction) {
		this.direction = direction
		var nextPosition
		if (direction === 'left' && this.canvasX - 1 >= 0) {
			nextPosition = [this.canvasX - 1, this.canvasY]
			if (!this.isBoundary(nextPosition)) {
				this.canvasX -= 1;
			}
		}

		if (direction === 'right' && this.canvasX + 1 < canvas.width/spriteSize) {
			nextPosition = [this.canvasX + 1, this.canvasY]
			if (!this.isBoundary(nextPosition)) {
				this.canvasX += 1;
			}
		}

		if (direction === 'up' && this.canvasY - 1 >= 0) {
			nextPosition = [this.canvasX, this.canvasY - 1]
			if (!this.isBoundary(nextPosition)) {
				this.canvasY -= 1;
			}
		} 

		if (direction === 'down' && this.canvasY + 2 < canvas.height/spriteSize){
			nextPosition = [this.canvasX, this.canvasY + 1]
			if (!this.isBoundary(nextPosition)) {
				this.canvasY += 1
			}
		}
	}

	isBoundary(nextPosition) {
		return boundaries.some(a => nextPosition.every((v, i) => v === a[i]));
	}

	render() {
		this.spriteMapX = this.spriteWidth * 5
		this.spriteMapY = this.directionSpriteYMap[this.direction] * spriteSize

		ctx.drawImage(
			spriteMap, 
			this.spriteMapX + this.spriteMapXAnimationOffset, 
			this.spriteMapY, 
			this.spriteWidth, 
			this.spriteHeight, 
			spriteSize * this.canvasX, 
			spriteSize * this.canvasY, 
			this.spriteWidth,
			this.spriteHeight, 
		)
	}
}
