package view;

import javax.swing.table.AbstractTableModel;

import model.article.Article;

import controller.GestionArticle;

public class ModelStatiqueArticle extends AbstractTableModel {
	//private final Article[] articles;

	private static final long serialVersionUID = 7533497742126853386L;
	private final String[] entetes = {"Code", "Designation", "Delai", "Stock"};

	public ModelStatiqueArticle() {
		super();
	}


	@Override
	public int getRowCount() {
		if(GestionArticle.listeArticles.isEmpty()) return 0;
		else return GestionArticle.listeArticles.size();
	}


	@Override
	public int getColumnCount() {
		return entetes.length;
	}


	@Override
	public String getColumnName(int columnIndex) {
		return entetes[columnIndex];
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public Class getColumnClass(int column) {
		if (column == 2) return Integer.class;
		else if (column == 3) return Integer.class;
		else return String.class;
	}


	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		//System.out.println(rowIndex);
		//System.out.println("size : "+GestionArticle.listeArticles.size());
		switch(columnIndex){
		case 0:
			return GestionArticle.listeArticles.get(rowIndex).getReference();
		case 1:
			return GestionArticle.listeArticles.get(rowIndex).getDesignation();
		case 2:
			return GestionArticle.listeArticles.get(rowIndex).getDelai();
		/*case 3:
			return GestionArticle.listeArticles.get(rowIndex).getDelais();*/
		case 3:
			return GestionArticle.listeArticles.get(rowIndex).getStock();
		default:
			return null; //Ne devrait jamais arriver
		}


	}

	public String generateName(int i) {
		String str = "Article ";
		if (GestionArticle.cptArticles +i <10) str+="0";
		return str+(GestionArticle.cptArticles+i);
	}

	public void addArticle(int delai/*, float delais*/, int stock) {
		int i=0;
		while(!GestionArticle.creerArticle(generateName(i), delai, stock)) i++;		
		fireTableRowsInserted(GestionArticle.listeArticles.size() -1, GestionArticle.listeArticles.size() -1);
	}

	public void removeArticle(int rowIndex) {
		//int i = RetournerIndiceDansListe(rowIndex);
		GestionArticle.supprimerArticle(rowIndex);
		fireTableRowsDeleted(rowIndex,rowIndex);
	}
	
	/*public void removeArticle(int rowIndex, String Reference) {
		//int i = RetournerIndiceDansListe(rowIndex);
		GestionArticle.supprimerArticle(Reference);
		fireTableRowsDeleted(rowIndex,rowIndex);
	}*/


	/*private int RetournerIndiceDansListe(int IndiceTableau){
		int i=0;
		System.out.println(i);
		while((i<GestionArticle.listeArticles.size())&&(i<this.getRowCount())&&(!(GestionArticle.listeArticles.get(i).getReference().equals((String)(this.getValueAt(IndiceTableau, 0)))))){
			i++;
			System.out.println(i);
		}
		System.out.println(i);
		return i;

	}*/

	public void supprimerTableau(){
		//int i=0;
		while(this.getRowCount()!=0){
			removeArticle(0);
			//i++;
		}
		GestionArticle.listeArticles.clear();
	}

	public void reconstruireTableau(){
		int i=0;
		while(i<GestionArticle.listeArticles.size()){

			try {
				fireTableRowsInserted(i, i);
				i++;
			} catch (Exception e) {
				i++;
			}
				//fireTableRowsInserted(IHM.tableau.getRowSorter().convertRowIndexToModel(i), IHM.tableau.getRowSorter().convertRowIndexToModel(i));
				//i++;

		}
	}

	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		if(columnIndex==0) return false;
		else return true; //Toutes les cellules éditables
	}


	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		if(aValue != null){
			Article article = GestionArticle.listeArticles.get(rowIndex);

			switch(columnIndex){

			case 1:
				article.setDesignation((String)aValue);
				break;
			case 2:
				article.setDelai((Integer)aValue);
				break;
			/*case 3:
				article.setDelais((Float)aValue);
				break;*/
			case 3:
				article.setStock((Integer)aValue);
				break;
			}
		}
	}
}
