package modele;

import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;

class ZModel extends AbstractTableModel{
	   private Object[][] data;
	   private String[] title;
	    
	   //Constructeur
	   public ZModel(Object[][] data, String[] title){
	      this.data = data;
	      this.title = title;
	   }
	    
	   //Retourne le titre de la colonne à l'indice spécifié
	   public String getColumnName(int col) {
	     return this.title[col];
	   }
	 
	   //Retourne le nombre de colonnes
	   public int getColumnCount() {
	      return this.title.length;
	   }
	    
	   //Retourne le nombre de lignes
	   public int getRowCount() {
	      return this.data.length;
	   }
	    
	   //Retourne la valeur à l'emplacement spécifié
	   public Object getValueAt(int row, int col) {
	      return this.data[row][col];
	   }
	    
	   //Définit la valeur à l'emplacement spécifié
	   public void setValueAt(Object value, int row, int col) {
	      //On interdit la modification sur certaines colonnes !
	      if(!this.getColumnName(col).equals("Age")
	         && !this.getColumnName(col).equals("Suppression"))
	         this.data[row][col] = value;
	   }
	          
	  //Retourne la classe de la donnée de la colonne
	   public Class getColumnClass(int col){
	      //On retourne le type de la cellule à la colonne demandée
	      //On se moque de la ligne puisque les données sont les mêmes
	      //On choisit donc la première ligne
	      return this.data[0][col].getClass();
	   }
	 
	   //Méthode permettant de retirer une ligne du tableau
	   public void removeRow(int position){
	       
	      int indice = 0, indice2 = 0;
	      int nbRow = this.getRowCount()-1;
	      int nbCol = this.getColumnCount();
	      Object temp[][] = new Object[nbRow][nbCol];
	       
	      for(Object[] value : this.data){
	         if(indice != position){
	            temp[indice2++] = value;
	         }
	         System.out.println("Indice = " + indice);
	         indice++;
	      }
	      this.data = temp;
	      temp = null;
	      //Cette méthode permet d'avertir le tableau que les données
	      //ont été modifiées, ce qui permet une mise à jour complète du tableau
	      this.fireTableDataChanged();
	   }
	    
	   //Permet d'ajouter une ligne dans le tableau
	   public void addRow(Object[] data){
	      int indice = 0, nbRow = this.getRowCount(), nbCol = this.getColumnCount();
	       
	      Object temp[][] = this.data;
	      this.data = new Object[nbRow+1][nbCol];
	       
	      for(Object[] value : temp)
	         this.data[indice++] = value;
	       
	          
	      this.data[indice] = data;
	      temp = null;
	      //Cette méthode permet d'avertir le tableau que les données
	      //ont été modifiées, ce qui permet une mise à jour complète du tableau
	      this.fireTableDataChanged();
	   }
	    
	    
	   public boolean isCellEditable(int row, int col){
	      return true;
	   }
	}