package depart.commun.monde2d;

import ca.ntro.app.fx.controls.World2dMouseEventFx;
import ca.ntro.app.world2d.Object2dFx;
import depart.commun.enums.ActionJoueur;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;

public class Palette2d extends Object2dFx {
	
	public static final double VITESSE_BOUGER = 200;
	public static final double VITESSE_FRAPPER = 550;
	public static final double VITESSE_RETOMBER = 300;
	
	private Balle2d balle = null;

	private boolean attrA = false;
	private double  targetTopLeftY;

	public Palette2d() {
		super();

		setWidth(100);           
		setHeight(20);
	}
	
	void setBalle(Balle2d balle) {
		this.balle = balle;
	}

	@Override
	public void onAddedToWorld() {
		setTopLeftX(getWorldWidth() / 2 - getWidth() / 2);
		setTopLeftY(getWorldHeight() - getHeight() - 2);
	}

	@Override
	protected boolean onMouseEvent(World2dMouseEventFx mouseEvent) {
		return false;
	}
	
	@Override
	public void onTimePasses(double secondsElapsed) {
		super.onTimePasses(secondsElapsed);
		
		if(attrA
		      && getTopLeftY() + getHeight() > targetTopLeftY) {
			
			attrA = false;

			setTopLeftY(targetTopLeftY);
			setSpeedY(0);
		}
	}

	@Override
	public void drawOnWorld(GraphicsContext gc) {
		gc.setFill(Color.CORNFLOWERBLUE);
		
		gc.fillRect(getTopLeftX(), 
				    getTopLeftY(), 
				    getWidth(), 
				    getHeight());
	}

	public void reagirActionJoueur(ActionJoueur action) {
		if(attrA) return;

		if(action == ActionJoueur.BOUGER_OUEST) {

			setSpeedX(-VITESSE_BOUGER);
			setSpeedY(0);

		} else if(action == ActionJoueur.BOUGER_NORD_OUEST) {

			setSpeedX(-VITESSE_BOUGER);
			setSpeedY(-VITESSE_BOUGER);

		} else if(action == ActionJoueur.BOUGER_NORD) {

			setSpeedX(0);
			setSpeedY(-VITESSE_BOUGER);

		} else if(action == ActionJoueur.BOUGER_NORD_EST) {

			setSpeedX(VITESSE_BOUGER);
			setSpeedY(-VITESSE_BOUGER);

		} else if(action == ActionJoueur.BOUGER_EST) {

			setSpeedX(VITESSE_BOUGER);
			setSpeedY(0);

		} else if(action == ActionJoueur.BOUGER_SUD_EST) {

			setSpeedX(VITESSE_BOUGER);
			setSpeedY(VITESSE_BOUGER);

		} else if(action == ActionJoueur.BOUGER_SUD) {

			setSpeedX(0);
			setSpeedY(VITESSE_BOUGER);

		} else if(action == ActionJoueur.BOUGER_SUD_OUEST) {

			setSpeedX(-VITESSE_BOUGER);
			setSpeedY(VITESSE_BOUGER);

		}else if(action == ActionJoueur.FRAPPER) {
			
			attrA = true;

			targetTopLeftY = getTopLeftY();
			setTopLeftY(getTopLeftY()-50);
			setSpeedY(+VITESSE_RETOMBER);
			
			if(balle.getTopLeftX() +  balle.getWidth() > getTopLeftX()
					&& balle.getTopLeftX() < getTopLeftX() + getWidth()
					&& balle.getTopLeftY() + balle.getHeight() > getTopLeftY()) {
				balle.setTopLeftY(getTopLeftY());
				balle.setSpeedY(-VITESSE_FRAPPER);
			}

		}else {
			
			setSpeedX(0);
			setSpeedY(0);

		}
	}

}
