import java.io.*;
import Trees.*;

public class TestTree {
   private static void ClearScreen(){
     for (int i=0;i<25;i++)
 System.out.println("");
   }

   public static void menu(){
      System.out.println("Test Alberi Posizionali generali.....................");
      System.out.println("");
      System.out.println("1.  totale elementi nell'albero");
      System.out.println("2.  controlla se l'albero e' vuoto");
      System.out.println("3.  elimina tutti gli elementi dall'albero");
      System.out.println("4.  inserisce un nuovo elemento nell'albero");
      System.out.println("5.  rimozione dell'elemento corrente");
      System.out.println("6.  ritorna il valore dell'elemento corrente");
      System.out.println("7.  riporta il puntatore corrente alla radice");
      System.out.println("8.  moveDown del puntatore corrente");
      System.out.println("9.  moveUp del puntatore corrente");
      System.out.println("10. stampa gli elementi con visita depth-first ricorsiva");
      System.out.println("11. albero k-completo?");

      System.out.println("0.  Esci");
      System.out.println("");
      System.out.println("....................................................");
   }

   public static void main(String[] args) {
      int risposta;
      int valore;
      GenTree tree=new GenTree();
      InputStream in=System.in;
      BufferedReader d = new  BufferedReader(new InputStreamReader(in));
      try{
         do {
            ClearScreen();
            menu();
            risposta = Integer.parseInt(d.readLine());
            String testo = "";
	    Integer t;
	    boolean b = true;
            switch (risposta){

               case 1 : //size
		  System.out.println(tree.size()+
                       (tree.size() == 1?" nodo.":" nodi."));
		  break;

               case 2 :// isEmpty
		  System.out.println("L'albero "+ 
                       (tree.isEmpty()?" e' vuoto.":" non e' vuoto"));	
		  break;

               case 3 :// clear
		  tree.clear();
		  System.out.println("Albero svuotato.");
		  break;

               case 4 :// insert
		  System.out.print("Valore (intero) da inserire: ");
		  try {
		     t = Integer.valueOf(d.readLine());
		  } catch (Exception e1) {
		       System.out.println(e1.toString());
		       break;
		  }
                  tree.insert(t);
		  System.out.println("Inserzione effettuata");
		  break;

	       case 5: // remove dell'elemento corrente

		  if (!tree.isEmpty() && (t = (Integer)tree.remove())!= null)
                     System.out.println("Rimozione effettuata: " + 
                     t.toString());
                  else
		     System.out.println("Albero vuoto o il nodo corrente non e' una foglia ");
		  break;

	       case 6: // getValue
		  if (tree.isEmpty())
		     System.out.println("albero vuoto!");
                  else 
		     System.out.println("Valore corrente: " + tree.getValue());
		  break;

	       case 7: // reset
                  tree.reset();
                  System.out.println("Cursor posizionato sulla radice");
		  break;

	       case 8: // moveDown 
		  System.out.print("Nuova posizione: ");  
		  try {
		     valore = Integer.parseInt(d.readLine());
		  } catch (Exception e1) {
		       System.out.println(e1.toString());
		       break;
		  }
                  if (tree.moveDown(valore))
		     System.out.println("moveDown effettuata");
                  else
                     System.out.println("posizione non valida: moveDown "+
                          "non effettuata");
		  break;

	       case 9: // moveUp
                  if (tree.moveUp())
		     System.out.println("moveUp effettuata");
                  else
                     System.out.println("moveUp non effettuata");
                  break;

	       case 10:// DFVisit
                  System.out.println(tree.DFvisit());
		  break; 

	       case 11:// albero k-completo?
		  System.out.print("Inserire k: ");  
		  try {
		     valore = Integer.parseInt(d.readLine());
		  } catch (Exception e1) {
		       System.out.println(e1.toString());
		       break;
		  }
                  if (tree.kcompleto(valore))
		     System.out.println("l'albero e' " + valore + "-completo");
                  else
                     System.out.println("l'albero non e' " + valore + "-completo");

		  break; 

	       default:
                  break;
            }	    
            if (risposta!=-2) {	       
               System.out.println("(Premere Invio)");	       
               d.readLine();	    
            }         
         }while (risposta!=0);      
      }catch (Exception ex){          
         ex.printStackTrace();          
         System.out.println(ex.toString());      
      }   
   }
}

