import java.util.*;
class Bibliothek {

	private Vector regale;
	
	public Bibliothek(){
		regale=new Vector();
	}
	public Bibliothek(Regal regal){
		regale=new Vector();
		regale.add(regal);
	}
	
	public void addRegal(Regal regal){
		regale.add(regal);
	}
	
	public boolean removeRegal(String ort){
		for (int i=0; i<regale.size(); i++){
			Regal regal=(Regal)regale.elementAt(i);
			if (regal.getStandort().equals(ort)){
				regale.remove(regal);
				if (verteileBuecher(regal)) return true;
				else regale.add(regal);
			}
		}
		return false;
	}

	private boolean verteileBuecher(Regal regal){
		int neuesRegalZähler=0;
		if (regal.getBuecher().size()>getGesamteFreieKapazitaet())
			return false;
		for (int i=0; i<regal.getAnzahlBuecher(); i++){
			if (((Regal)regale.elementAt(neuesRegalZähler)).getFreieKapazitaet()>0)
				((Regal)regale.elementAt(neuesRegalZähler)).addBuch((Buch)regal.getBuecher().elementAt(i));
			else i--;
			neuesRegalZähler++;
			if (neuesRegalZähler>=regale.size()) neuesRegalZähler=0;
		}
		return true;
	}
		
	public int getAnzahlRegale(){
		return regale.size();
	}
	public int getGesamteKapazitaet(){
		int zaehler=0;
		for (int i=0; i<regale.size(); i++)
			zaehler += ((Regal)regale.elementAt(i)).getMaxKapazitaet();
		return zaehler;
	}
	public int getGesamteFreieKapazitaet(){
		int zaehler=0;
		for (int i=0; i<regale.size(); i++)
			zaehler += ((Regal)regale.elementAt(i)).getFreieKapazitaet();
		return zaehler;
	}
	public int getGesamteAnzahlBuecher(){
		return getGesamteKapazitaet()-getGesamteFreieKapazitaet();
	}
	
	public static void main(String[] args){
		// 3 Regale mit 4 Büchern
		Regal regal1=new Regal(3,"Vorne");
		Regal regal2=new Regal(3,"Mitte");
		Regal regal3=new Regal(3,"Hinten");
		for (int i=0; i<3; i++) regal1.addBuch(new Buch("Buch"+i,"1-234-56789-"+i));
		regal2.addBuch(new Buch("Buch4","3 528 57235 3"));
		// Nimm die Regale in die Bibliothek auf
		Bibliothek meineBibliothek=new Bibliothek();
		meineBibliothek.addRegal(regal1);
		meineBibliothek.addRegal(regal2);
		meineBibliothek.addRegal(regal3);
		// Die Bibliothek vor dem Entfernen von Regal 1
		System.out.println("In der Bibliothek stehen "+
				meineBibliothek.getAnzahlRegale()+
				" Regale mit "+
				meineBibliothek.getGesamteAnzahlBuecher()+
				" Büchern und "+
				meineBibliothek.getGesamteFreieKapazitaet()+
				" freien Plätzen.");
		System.out.println("Nehme das erste Regal weg: "+meineBibliothek.removeRegal("Vorne"));
		// Die Bibliothek vor dem Entfernen von Regal 1		
		System.out.println("In der Bibliothek stehen "+
				meineBibliothek.getAnzahlRegale()+
				" Regale mit "+
				meineBibliothek.getGesamteAnzahlBuecher()+
				" Büchern und "+
				meineBibliothek.getGesamteFreieKapazitaet()+
				" freien Plätzen.");
		System.out.println("Versuche, das zweite Regal wegzunehmen: "+meineBibliothek.removeRegal("Hinten"));
		System.out.println("In der Bibliothek stehen "+
				meineBibliothek.getAnzahlRegale()+
				" Regale mit "+
				meineBibliothek.getGesamteAnzahlBuecher()+
				" Büchern und "+
				meineBibliothek.getGesamteFreieKapazitaet()+
				" freien Plätzen.");		
	}
}
