package main;

import entity.Enemy;
import entity.Entity;
import entity.Player;

public class CollisionHandler {
	
	GamePanel gp;
	
	public CollisionHandler(GamePanel gp) {
		this.gp = gp;
	}
	
	public void checkTile(Entity entity) {
		
		int entityLeftWorldX = entity.posX + entity.solidArea.x;
		int entityRightWorldX = entity.posX + entity.solidArea.x + entity.solidArea.width;
		int entityTopWorldY = entity.posY + entity.solidArea.y;
		int entityBottomWorldY = entity.posY + entity.solidArea.y + entity.solidArea.height;
		
		int entityLeftCol = entityLeftWorldX / gp.tileSize;
		int entityRightCol = entityRightWorldX / gp.tileSize;
		int entityTopRow = entityTopWorldY / gp.tileSize;
		int entityBottomRow = entityBottomWorldY / gp.tileSize;
		
		int tileNum1, tileNum2;
		tileNum1=0;
				tileNum2=0;
		switch(entity.direction) {
		case "up":
			entityTopRow = (entityTopWorldY - entity.speed) / gp.tileSize;
			tileNum1 = gp.tileM.mapTileNum[entityLeftCol][entityTopRow];
			tileNum2 = gp.tileM.mapTileNum[entityRightCol][entityTopRow];
			if(gp.tileM.tile[tileNum1].collision == true || gp.tileM.tile[tileNum2].collision == true) {
				entity.collisionOn = true;
			}
			break;
		case "down":
			entityBottomRow = (entityBottomWorldY + entity.speed) / gp.tileSize;
			tileNum1 = gp.tileM.mapTileNum[entityLeftCol][entityBottomRow];
			tileNum2 = gp.tileM.mapTileNum[entityRightCol][entityBottomRow];
			if(gp.tileM.tile[tileNum1].collision == true || gp.tileM.tile[tileNum2].collision == true) {
				entity.collisionOn = true;
			}
			break;
		case "left":
			entityLeftCol = (entityLeftWorldX - entity.speed) / gp.tileSize;
			tileNum1 = gp.tileM.mapTileNum[entityLeftCol][entityTopRow];
			tileNum2 = gp.tileM.mapTileNum[entityLeftCol][entityBottomRow];
			if(gp.tileM.tile[tileNum1].collision == true || gp.tileM.tile[tileNum2].collision == true) {
				entity.collisionOn = true;
			}
			break;
		case "right":
			entityRightCol = (entityRightWorldX + entity.speed) / gp.tileSize;
			tileNum1 = gp.tileM.mapTileNum[entityRightCol][entityTopRow];
			tileNum2 = gp.tileM.mapTileNum[entityRightCol][entityBottomRow];
			if(gp.tileM.tile[tileNum1].collision == true || gp.tileM.tile[tileNum2].collision == true) {
				entity.collisionOn = true;
			}
			break;

		}
		if (gp.tileM.tile[tileNum1].kills == true || gp.tileM.tile[tileNum2].kills == true) {
			entity.posY=entity.posY-10000;
		}
		
	}
	
	public boolean playerEnemyCollision(Player player, Entity entity) {
		
		int playerLeft = player.posX;
        int playerRight = player.posX + player.size;
        int playerTop = player.posY;
        int playerBottom = player.posY + player.size;

        int enemyLeft = entity.posX;
        int enemyRight = entity.posX + entity.size;
        int enemyTop = entity.posY;
        int enemyBottom = entity.posY + entity.size;

        if (playerRight > enemyLeft &&
            playerLeft < enemyRight &&
            playerBottom > enemyTop &&
            playerTop < enemyBottom) {
            return true;
        }
        
		return false;
	}
	
}
