package agents;

import gameObjects.Player;
import knowledgeAndTechnics.Intelligence;
import knowledgeAndTechnics.NoFreePlayerException;

/*
 * Created on Oct 12, 2004
 *
 */

/**
 * Steht nur dumm rum
 * @author wir
 * 
 */
public class Striker extends Agent {
	public void playerInitialization(){
		baseFunctions.init(infoPool.getTeamName());
		
		//Die Startposition
		infoPool.setXPlayerStart(-30);
		infoPool.setYPlayerStart(10);
		
		// Die Ruheposition
		infoPool.setXPlayerHome(-25);
		infoPool.setYPlayerHome(10);
		// Der Handlungsbereich
		infoPool.setX1PlayerActingField(-52.5);
		infoPool.setY1PlayerActingField(-34);
		infoPool.setX2PlayerActingField(52.5);
		infoPool.setY2PlayerActingField(34);
		// weitere Variablen
		infoPool.setX1PlayerFreeKickField(-60); //außerhalb, damit er nix tut
		infoPool.setY1PlayerFreeKickField(-60);
		infoPool.setX2PlayerFreeKickField(-60);
		infoPool.setY2PlayerFreeKickField(-60);
	}
	
	public void handlePlayOn(){
		// Anweisung zur Ballannahme
		if (infoPool.getPassMessage() != null){
			infoPool.handlePassMessage();
			return;
		}
		
		//Ball ist in unserem Zuständigkeitsbereich
		if (infoPool.checkBallInActingField()) {
			//Ball ist in unserem Zuständigkeitsbereich
			//Ich habe den Ball
			if (infoPool.checkBallPossession() == Intelligence.BALL_POSSESSION_ME) {
				//Das Tor ist nahe genug und das Schußfeld aufs Tor frei
				if ((infoPool.distTo(infoPool.getOpponentGoal().getAbsX(), infoPool.getOpponentGoal().getAbsY()) < 15)
					&& (infoPool.calculateGoalKickDeltaMax() >= 5)) {
					infoPool.kickToGoal();
				}
				//Das Tor ist nahe genug und aber das Schußfeld ist nicht frei
				if ((infoPool.distTo(infoPool.getOpponentGoal().getAbsX(), infoPool.getOpponentGoal().getAbsY()) < 15)
					&& (infoPool.calculateGoalKickDeltaMax() < 5)) {
						try {
							Player freePlayer = infoPool.findFreePlayer();
					        infoPool.passToFreePlayer(freePlayer);
						} catch (NoFreePlayerException e){
						    System.out.println("striker: hab aufs Tor geschossen, weil ich nah genug dran war und es auch frei war");
							infoPool.kickToGoal();
						}
				}
				//Distanz zum Tor zu weit
				if (infoPool.distTo(infoPool.getOpponentGoal().getAbsX(), infoPool.getOpponentGoal().getAbsY()) > 15) {
					infoPool.dribbleTo(infoPool.getOpponentGoal().getAbsX(), infoPool.getOpponentGoal().getAbsY());
				}
			}
			
			//Ball ist in unserem Zuständigkeitsbereich
			//Unsere Mannschaft hat den Ball
			else if (infoPool.checkBallPossession() ==  Intelligence.BALL_POSSESSION_WE){
				if (infoPool.distTo(infoPool.getXPlayerHome(), infoPool.getYPlayerHome()) > 1){
					double dir = infoPool.angleToObject(infoPool.getXPlayerHome(), infoPool.getYPlayerHome());
					infoPool.dashToSeeingBall(dir,Intelligence.STAMINA_NEUTRAL_SPEED);
				}
			}
			//Ball ist in unserem Zuständigkeitsbereich
			//Gegnerische Mannschaft hat den Ball
			else if (infoPool.checkBallPossession() ==  Intelligence.BALL_POSSESSION_OPPONENT){
				infoPool.interceptBall();
				//TODO: muß noch angepasst werden, lange suche verhindern
				infoPool.kickToGoal();
			}
		} 
        //Ball ist Nicht in unserem Zuständigkeitsbereich
		else{
			//Ball ist Nicht in unserem Zuständigkeitsbereich
			//Wir befinden uns in unserem ActingField
			if  (infoPool.checkPlayerInActingField(6)) {
				//Ball ist Nicht in unserem Zuständigkeitsbereich
				//Wir befinden uns in unserem ActingField
				// ich hab den Ball
				if (infoPool.checkBallPossession() == Intelligence.BALL_POSSESSION_ME) {
				}
				//Ball ist Nicht in unserem Zuständigkeitsbereich
				//Wir befinden uns in unserem ActingField
				//Unsere Mannschaft hat den Ball
				else if (infoPool.checkBallPossession() ==  Intelligence.BALL_POSSESSION_WE){
					if (infoPool.distTo(infoPool.getXPlayerHome(), infoPool.getYPlayerHome()) > 1){
						double dir = infoPool.angleToObject(infoPool.getXPlayerHome(), infoPool.getYPlayerHome());
						infoPool.dashToSeeingBall(dir,Intelligence.STAMINA_NEUTRAL_SPEED);
					}
				}
				//Ball ist Nicht in unserem Zuständigkeitsbereich
				//Wir befinden uns in unserem ActingField
				//Gegnerische Mannschaft hat den Ball
				else if (infoPool.checkBallPossession() ==  Intelligence.BALL_POSSESSION_OPPONENT){
					infoPool.runToBall(Intelligence.STAMINA_NEUTRAL_SPEED, Integer.MAX_VALUE);
				}
			} 
			//Ball ist Nicht in unserem Zuständigkeitsbereich
			//Wir befinden uns nicht in unserem ActingField
			else {
				if (infoPool.distTo(infoPool.getXPlayerHome(), infoPool.getYPlayerHome()) > 1){
					double dir = infoPool.angleToObject(infoPool.getXPlayerHome(), infoPool.getYPlayerHome());
					infoPool.dashToSeeingBall(dir,Intelligence.STAMINA_NEUTRAL_SPEED);
				}
			}
		}
	}
	
	public Striker(String[] args){
		super(args);
	}
	
	public static void main(String[] args) {
		Striker d = new Striker(args);
		d.start();
	}
}
