package agents;

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


/******************************************************************************
 * @author Soccer Gruppe 1
 * Dieser Stuermer hat den vorderen mittleren Bereich zugewiesen,
 * soll Paesse aus dem Mittelfeld entgegennehmen, in Richtung
 * Tor dribbeln und entweder schiessen oder an einen anderen Stuermer
 * abgeben.
 * Ausserdem ist er derjenige, der den Anstoss ausfuehrt.
 ******************************************************************************/
public class Mittelstuermer extends Agent {
	private static Mittelstuermer Peter;
	
	public Mittelstuermer(String[] args){
		super(args);
	}

	
	/**************************************************************************
	 * Methode zum Setzen der Grundspielerdaten 
	 * und Initialisierung
	 * wie z.B. die AusgangsPosition, Handlungsbereich
	 * des Spielers 
	 **************************************************************************/
	
	public void playerInitialization(){
		baseFunctions.init(infoPool.getTeamName());
		// Die Ausgangsposition
		infoPool.setXPlayerHome(30);
		infoPool.setYPlayerHome(0);
		// Der Handlungsbereich
		infoPool.setX1PlayerActingField(-52.5);
		infoPool.setY1PlayerActingField(-34);
		infoPool.setX2PlayerActingField(52.5);
		infoPool.setY2PlayerActingField(34);
		// weitere Variablen
		infoPool.setX1PlayerFreeKickField(-52.5);
		infoPool.setY1PlayerFreeKickField(-34);
		infoPool.setX2PlayerFreeKickField(52.5);
		infoPool.setY2PlayerFreeKickField(34);	
	}
	
	
	/**************************************************************************
	 * Hier wird entschieden, welche Aktion abhaengig von Playmode und 
	 * Umweltdaten ausgefuehrt werden soll. 
	 **************************************************************************/
	public void decideAction(){
		while (infoPool.isPlayerAlive()){
			int playMode = infoPool.getPlayMode();			
			// Hier der Teil für die Playmodes
				if (playMode == Intelligence.BEFORE_KICK_OFF) {
					if (infoPool.getPlayDirection() == Intelligence.PLAY_DIRECTION_LEFT)
						baseFunctions.move(-10,0);
					else baseFunctions.move(-0.3, 0);
				}
				if (playMode == Intelligence.PLAY_ON){
					/*
					searchBall();
					Player p = ballOwner();
					if (p.getTeam() == Player.TEAM_UNKNOWN) positionEinnehmen();
					if (p.getTeam() == Player.TEAM_WE) {
						if (p.getUnum() == 1) freilaufen();
						else if (p.getUnum() <= 4) freilaufen();
						else if (p.getUnum() <= 8) decken();
						else positionEinnehmen();    
					}
					if (p.getTeam() == Player.TEAM_OPPONENT){
						if (p.getAbsX() > 20) ausruhenVorne();
						else if () //decken oder ballabziehen
					}
					
					
					if (friendlyPlayerHasTheBall()){
					
					}	
				*/
					
					//Hier muß nix gemacht werden: normaler Spielverlauf
				}
				if (playMode == Intelligence.TIME_OVER){
					baseFunctions.bye();
					infoPool.setPlayerAlive(false);
				}
				//Anstoss ausfuehren
				if (playMode == Intelligence.KICK_OFF_WE){				    
				    infoPool.searchBall(0);
				    Ball ball = infoPool.getBall();
				    infoPool.runToXY(ball.getAbsX(), ball.getAbsY(), 
				            Intelligence.STAMINA_NEUTRAL_SPEED);
				    /* Irgendwoher kommt da eine ziemliche Ungenauigkeit.
				     * Frage: Wie gross ist der Fehler beim Drehen eigentlich?
				     * Workaround: while...
				    **/
				    while(Math.abs(infoPool.getBodyDirection() + 180) > 5) 
				    	baseFunctions.turnAbs(-180);
				    baseFunctions.kick(60, 0);
				}
				if (playMode == Intelligence.KICK_OFF_OPPONENT){
					//Nur auf der Lauer sein und warmhalten ;-)
					baseFunctions.turnAbs(0);
				}
				if (playMode == Intelligence.FREE_KICK_WE){
					if (infoPool.getBall() == null) infoPool.searchBall(0, Integer.MAX_VALUE);
					if (infoPool.checkBallInFreeKickField() == true){
						System.out.println("passToFreePlayr");
						try{
						    Player freePlayer = infoPool.findFreePlayer();
					        infoPool.passToFreePlayer(freePlayer);
						}catch (NoFreePlayerException e){//doNothing
							}
						}
					}
					System.out.println("passToFreePlay_nichtdrin");
					System.out.println(infoPool.getBall().getAbsX() + ", " + infoPool.getBall().getAbsY());
				}
				Thread.yield();
			}		
					//Spieler auf die Ausgangsposition stellen
	

public static void main(String[] args) {
	Mittelstuermer d = new Mittelstuermer(args);
	d.start();
}
}



