/**

 * @author Alaa Aldin

 * @version 1.0

 */
package de.jaujau.daten;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class Spielerverwaltung {
  private int local;
  private int level;
  private Spielerdaten spieler;
  private Spielerdaten aktuellerSpieler;
  private ArrayList <Spielerdaten> daten = new ArrayList<Spielerdaten>();
  private String [][] transdaten;
  public void addSpieler(String name) { //Neue Spieler hinzufügen
	  //leseDaten();
	  daten.add(new Spielerdaten(name, 0));
  }
  
  public void setaktuellerSpieler(Spielerdaten name) {
	  aktuellerSpieler = name;
  }
  
  public Spielerdaten getaktuellerSpieler() {
	  return aktuellerSpieler;
  }
  /**
   * Set the value of level
   * 
   * @param newlevel the new value of level
   */
  
  public void setLevel(int newlevel) {
    level = newlevel;
  }

  /**
   * Get the value of level
   * 
   * @return the value of level
   */
  
  public int getLevel() {
    return level;
  }

  public String [][] toArray (ArrayList <Spielerdaten> a){ //Arraylist in Array umwandeln
	  String [][]neuerArray = new String [a.size()][2];
	  for (int j = 0 ; j< a.size(); j++) {
		  neuerArray[j][0] = a.get(j).getName();
		  neuerArray[j][1] = Integer.toString(a.get(j).getPunktestand());
	  }
	  return neuerArray;
  }

  /**
   * Set the value of spieler arraylist von Spieler
   * 
   * @param newSpieler the new value of spieler
   */
  
  public void setSpieler(String a) {	//setze einen Spieler ein.
	  leseDaten();
	  transdaten = toArray(getDaten());
	  	System.out.println(transdaten.length);
	  	for (int i = 0; i < transdaten.length; i++) {
	  		if (transdaten[i][0].matches(a)) {
	  			setPlace(i);
	  		}
	  	}
 	}
	public void editName (String alt, String neu) { //Editieren des Namen des Spielers
		setSpieler(alt);
		int place = getPlace();
		transdaten[place][0] = neu;
		daten.get(place).setName(neu);
		speichernDaten();
	}
  	public void erhoehePunkte (String a) { //erhoeht die Punkten des Spielers um 1
  		setSpieler(a);
  		int place = getPlace();
  		int neuerWert = Integer.parseInt(transdaten[place][1])+1;
  		transdaten[place][1] = Integer.toString(neuerWert);
  		daten.get(place).setPunktestand(neuerWert);
  		speichernDaten();
  	}

  
  public void setPlace(int loc) { //setzt der Ort der Daten im Array
	  local = loc;
  }
  
  public int getPlace() {	//Ort der Daten im Array
	  return local;
  }
/**
   * Get the value of spieler arraylist von Spieler
   * 
   * @return the value of spieler
   */
  
 
  public ArrayList<Spielerdaten> getDaten() {		// Zurückgeben der gelesenen Daten aus der Textdatei
		return daten;
	}
  
  public void umsetzeDaten( String [][] neueDaten) {//Arraylist aus Array
	  for (int i = 0 ; i < neueDaten.length; i++) {
	    	daten.add(new Spielerdaten (neueDaten[i][0], Integer.parseInt(neueDaten[i][1])));
	    	}
  }
  /**
   */
  public void leseDaten() {  //lese Daten aus der Textdatei und speichere die in die Arraylist
    umsetzeDaten(gethighscoreTabelle());
   /* for (Spielerdaten a : daten) {	// Müll
    	System.out.println(a.getName() + " " +a.getPunktestand());
    }*/
  }

   public void speichernDaten() { //Speichere die bearbeiteten Daten in die Textdatei (Aus der Arraylist)
	  ArrayList <Spielerdaten> newDaten = getDaten();
	  String [][] umwandelteDaten = new String [newDaten.size()][2];
	  int i = 0;
	  if (! newDaten.isEmpty()) {
	  for (Spielerdaten inhalt : newDaten ) {
		  umwandelteDaten [i][0] = inhalt.getName();
		  umwandelteDaten [i][1] = Integer.toString(inhalt.getPunktestand());
		  i++;  
	  }
	  try {
		   BufferedWriter writer = new BufferedWriter(new FileWriter("highscore.txt")); //Erzeugen eines effizienten Writers für Textdateien
		   for (int j = 0; j < umwandelteDaten.length; j++) {
			   writer.write(umwandelteDaten [j][0] +";"+umwandelteDaten [j][1]);
			   writer.newLine();
		   }
		   writer.close();
		}
		catch(IOException ioe) {
		   System.err.println(ioe);
		}
	  }
	  else 
		  System.err.println("Es gibt keine Dateien zum Speichern!");
  }
   
   public void dateiEinlesen() {
	    BufferedReader reader;
	    try {
	      reader = new BufferedReader(new FileReader("highscore.txt"));
	      String line = reader.readLine();
	      while (line != null) {
	    	String [] newline = line.split(";");
	        String name = newline[0];
	        int score = Integer.parseInt(newline[1]);
	        daten.add(new Spielerdaten (name,score));
	        line = reader.readLine();  
	      }
	      reader.close();
	    } catch (IOException e) {
	      e.printStackTrace();
	    }
	  }
   
  // die Daten als zweidimensionales Array
  // zurueckgegeben
  public String[][] gethighscoreTabelle() {
	  		return toArray(daten);
  }
}
