/**

 * @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 index = 15;
  private int level;
  private Spielerdaten spieler;
  private ArrayList <Spielerdaten> daten = new ArrayList<Spielerdaten>();
  private String [][] transdaten;
  public void addSpieler(String name, int punkte) { //Neue Spieler hinzufügen
	  //leseDaten();
	  addZeilen();
	  daten.add(new Spielerdaten(name, punkte));
  }
  
  /**
   * 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 [15][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 addZeilen() {  //die Zeilen der Textdatei erweitern
	index ++;
}
  
  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 Spielerdaten getSpieler() {
    return 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)
	  //leseDaten();
	  ArrayList <Spielerdaten> newDaten = getDaten();
	  String [][] umwandelteDaten = new String [index][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!");
  }

  // Die Highscore-datei wird geoeffnet und die Daten als zweidimensionales Array
  // zurueckgegeben
  public String[][] gethighscoreTabelle() {
    String[][] rowData = new String[15][2];
    BufferedReader reader;
    try {
      reader = new BufferedReader(new FileReader("highscore.txt"));
      String line = reader.readLine();
      char[] lineArray;
      String name = "";
      String score = "";
      int zeilennummer = 0;
      boolean insArray = false;
      while (line != null) {
        lineArray = line.toCharArray();
        for (int i = 0; i < lineArray.length; i++) {
          if (lineArray[i] != ' ' && score.length() == 0) {
            name += lineArray[i];
          } else if (lineArray[i] == ' ' && name.length() != 0) {
            i++;
            score += lineArray[i];

          } else if (score.length() != 0) {
            score += lineArray[i];
            insArray = true;
          }
        }
        if (insArray) {
          rowData[zeilennummer][0] = name;
          rowData[zeilennummer][1] = score;
          insArray = false;
        }
        zeilennummer++;
        name = score = "";
        line = reader.readLine();
      }
      reader.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return rowData;
  }
}
