package lab;

import java.util.Random;

import javafx.geometry.Point2D;
import javafx.geometry.Rectangle2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.transform.Affine;
import javafx.scene.transform.Rotate;

public class Player extends WorldEntity implements Collisionable {
	private static final Random RANDOM = new Random();
	private Point2D speed;

	public Player(Level level, Point2D position, Point2D speed) {
		super(level, position);
		this.speed = speed;
	}

	public void drawInternal(GraphicsContext gc) {
		Point2D center = position.add(10, 25);
		double angle = speed.angle(1, 0);
		if (speed.getY() < 0) {
			angle = -angle;
		}
		Rotate rotateMatrix = Affine.rotate(angle, center.getX(), center.getY());
		gc.setTransform(new Affine(rotateMatrix));
		gc.setFill(Color.AQUA);
		gc.setStroke(Color.GREEN);
		gc.setLineWidth(5);
		gc.fillRect(center.getX(), center.getY(), 50, 1);
		gc.fillRoundRect(position.getX(), position.getY(), 20, 50, 20, 20);
		gc.strokeRoundRect(position.getX(), position.getY(), 20, 50, 20, 20);
	}

	public void simulate(double delay) {
		position = position.add(speed.multiply(delay / 1_000_000_000));
//		speed = speed.multiply(0.9994);
	}

	@Override
	public Rectangle2D getBoundingBox() {
		return new Rectangle2D(position.getX(), position.getY(), 20, 50);
	}

	@Override
	public boolean intersect(Rectangle2D another) {
		return getBoundingBox().intersects(another);
	}

	@Override
	public void hitBy(Collisionable another) {
		if (another instanceof Monster) {
			position = new Point2D(RANDOM.nextDouble(0, level.getWidth() * 0.4),
					RANDOM.nextDouble(level.getHeight() * 0.5, level.getHeight()));
		}

	}

}