/*----------------------------------------------------------------------------
 * Klasse:		    BahnVerwalter.java
 * Beschreibung:	Er enthält und verwaltet alle Bahnen
 * Autor:		    Jack Meyer
 * Datum:		    Dezember, 1997
 * ---------------------------------------------------------------------------
 */


import java.awt.*;
import java.util.Vector;


public class BahnVerwalter {

    /*
     * Speicher Array für alle Bahen
     */
    Bahn itsBahnen[];

    /*
     * maximale Anzahl aller Bahen (Konstante)
     */
    final int maxBahnen = 18;

    /*
     * index, welche Bahn gerade angewählt ist
     */
    int  currentBahnIndex;

    /*
     * ein Ball zum Spielen
     */
    Ball itsBall;


    /*
     * Konstruktor, leere Bahnen
     */
    BahnVerwalter () {
        itsBahnen = new Bahn[maxBahnen];
        currentBahnIndex = 0;
        itsBall = new Ball(this);
    };

    /*
     * neue Bahn hinzufügen
     */
    void addNewBahn (int bahnNummer, String aStringParameter) {
            itsBahnen[bahnNummer-1] = new Bahn (aStringParameter);
    };


    /*
     * eine bestimmte Bahn anwählen
     */
    void selectBahn (int bahnNummer) {
        if ((bahnNummer >0) & (bahnNummer <= maxBahnen))
            currentBahnIndex = bahnNummer-1;
    };

    /*
     * die nächste Bahn anwählen
     */
    void selectNextBahn () {
        // Zähler für neue Bahn
        int counter = currentBahnIndex;
        // suche nächste gute Bahn
        do {
            // zähle weiter
            counter ++;
            // test über BahnArray hinaus ?
            if (counter >=maxBahnen) {
                // wenn ja behalte letzte gute Bahn
                counter = currentBahnIndex;
                break;
            };
        // Schalufe solange bis gute Bahn gefunden
        } while (itsBahnen[counter] == null);
        // diese nehmen wir
        currentBahnIndex = counter;
    };

    /*
     * die vorige Bahn anwählen
     */
    void selectPrevBahn () {
        // Zähler für neue Bahn
        int counter = currentBahnIndex;
        // suche nächste gute Bahn
        do {
            // zähle weiter
            counter --;
            // test über BahnArray hinaus ?
            if (counter <0) {
                // wenn ja behalte letzte gute Bahn
                counter = currentBahnIndex;
                break;
            };
        // Schalufe solange bis gute Bahn gefunden
        } while (itsBahnen[counter] == null);
        // diese nehmen wir
        currentBahnIndex = counter;
    };


    /*
     * die aktuell angewählte Bahn zurücksetzen
     */
    void resetCurrentBahn () {
        currentBahn().resetBall(itsBall);
        /* korrektur des Balls um Verschiebung PlayField */
        /* später irgendwie besser lösen !!!! */
        Point ballPos;
        ballPos = itsBall.getPos();
        ballPos.x += 150;
        ballPos.y += 15;
        itsBall.setPos(ballPos);
        itsBall.setDirection(0.0);
        itsBall.setSpeed(0.0);
    };


    /*
     * liefert die angwählte Bahn zurück
     */
    Bahn currentBahn () {
        return itsBahnen[currentBahnIndex];
    };

    /*
     * liefert den angwählten BahnIndex zurück
     */
    int currentBahnIndex () {
        return currentBahnIndex +1;
    };



    /*
     * test ob mindestens eine Bahn Exception hat
     */
    boolean eineBahnHatException () {
        for (int i =0; i<maxBahnen; i++) {
            if (itsBahnen[i] == null) continue;
            if (itsBahnen[i].hasException()) return (true);
        };
        return (false);
    };

    /*
     * gib Exception Meldung aus
     */
    String[] bahnException () {
        for (int i =0; i<maxBahnen; i++) {
            if (itsBahnen[i] == null) continue;
            if (itsBahnen[i].hasException()) {
                String[] exceptionString = new String [4];
                exceptionString[0] = itsBahnen[i].getExceptionMessage()[0];
                exceptionString[1] = itsBahnen[i].getExceptionMessage()[1];
                exceptionString[2] = itsBahnen[i].getExceptionMessage()[2];
                exceptionString[3] = "auf Bahn: " + (i+1);
                return exceptionString;
            };
        };
        return (null);
    };


    /**
     * Bewegung des Balls: Test ob Kollision aud aktueller Bahn
     */
    void collisionDetection (Ball aBall)
    {
//        System.out.println("Collision Detection in BahnVerwalter");
        // versatz um (150,15) siehe Minigolf.java
        // teste in aktueller Bahn
        this.currentBahn().collisionDetection (aBall, 150, 15);
    };



};