package entity;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;

import main.GamePanel;

public class Enemy extends Entity {
	
	GamePanel gp;
	
	public Enemy(GamePanel gp, int posX, int posY) {
		this.gp = gp;
		this.posX = posX;
		this.posY = posY;
		this.speed = 3;
		this.size = 32;
		loadImages();
		
		solidArea = new Rectangle(10, 14, 28, 28);

	}
	
	public void update() {
		
		directionChangeInterval++;
		if(directionChangeInterval >= 60) {
			Random random = new Random();
			int directionChange = random.nextInt(4);
			switch(directionChange) {
			case 0:
				direction = "down";
				break;
			case 1:
				direction = "left";
				break;
			case 2:
				direction = "right";
				break;
			case 3:
				direction = "up";
				break;
			}
			directionChangeInterval = 0;
		}
		
		collisionOn = false;
		
		// Temporary if statement because our map doesn't currently prevent us from leaving the map area
		// an error will be thrown if you are trying to compare tiles at an index outside the bounds of
		// the map; so lets just prevent that from happening until we have a better map.
		if(posX > 0 && posX + size < gp.maxWorldCol * gp.tileSize - gp.tileSize && posY > 0 && posY + size < gp.maxWorldRow * gp.tileSize - gp.tileSize) {
			gp.colH.checkTile(this);
		}
		
		if(!collisionOn) {
			switch(direction) {
			case "down":
				posY += speed;
				break;
			case "left":
				posX -= speed;
				break;
			case "right":
				posX += speed;
				break;
			case "up":
				posY -= speed;
				break;
			}
		}
		
		
		
		spriteCounter++;
	    if (spriteCounter > 8) {
	        if (spriteIncreasing) {
	            spriteNum++;
	            if(spriteNum == 3) {
	            	spriteIncreasing = false;
	            }
	        }
	        else {
	        	spriteNum--;
	            if(spriteNum == 1) {
	            	spriteIncreasing = true;
	            }
	        }
	        spriteCounter = 0;
	    }
	}
	
	private void loadImages() {
		int spriteWidth = 23;
		int spriteHeight = 32;
		
		try {
			spriteSheet = ImageIO.read(getClass().getResourceAsStream("/sprites/monster6.png"));
		
			down1 = spriteSheet.getSubimage(spriteWidth * 3, spriteHeight * 4, spriteWidth, spriteHeight);
			down2 = spriteSheet.getSubimage(spriteWidth * 4, spriteHeight * 4, spriteWidth, spriteHeight);
			down3 = spriteSheet.getSubimage(spriteWidth * 5, spriteHeight * 4, spriteWidth, spriteHeight);
			
			left1 = spriteSheet.getSubimage(spriteWidth * 3	, spriteHeight * 5	, spriteWidth, spriteHeight);
			left2 = spriteSheet.getSubimage(spriteWidth * 4	, spriteHeight * 5	, spriteWidth, spriteHeight);
			left3 = spriteSheet.getSubimage(spriteWidth * 5	, spriteHeight * 5	, spriteWidth, spriteHeight);
			
			right1 = spriteSheet.getSubimage(spriteWidth * 3, spriteHeight * 6, spriteWidth, spriteHeight);
			right2 = spriteSheet.getSubimage(spriteWidth * 4, spriteHeight * 6, spriteWidth, spriteHeight);
			right3 = spriteSheet.getSubimage(spriteWidth * 5, spriteHeight * 6, spriteWidth, spriteHeight);
			
			up1 = spriteSheet.getSubimage(spriteWidth * 3, spriteHeight * 7, spriteWidth, spriteHeight);
			up2 = spriteSheet.getSubimage(spriteWidth * 4, spriteHeight * 7, spriteWidth, spriteHeight);
			up3 = spriteSheet.getSubimage(spriteWidth * 5, spriteHeight * 7, spriteWidth, spriteHeight);
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	// Temporary method to showcase collision
	public void moveEnemy() {
		Random random = new Random();
		int newX = random.nextInt(650);
		int newY = random.nextInt(450);
		this.posX = newX;
		this.posY = newY;
	}
	
	public void draw(Graphics2D g2) {
		currentImage = selectImage(direction, spriteNum);
		
		int screenX = posX - gp.player.posX + gp.player.screenX;
        int screenY = posY - gp.player.posY + gp.player.screenY;
		
		g2.drawImage(currentImage, screenX, screenY, size, size, null);
		
	}

}
