package controler.gestion;

import java.sql.Connection;
import java.util.List;

import language.Language;
import view.vueGestionArticle.VueGestionAjouterArticle;
import view.vueGestionArticle.VueGestionModifierArticle;

import commander.Commander;

import controler.Message;
import database.crud.ArticleCrud;
import database.crud.CategorieArticleCrud;
import database.dataset.Article;
import database.dataset.Categorie_article;

public class ControlerGestionAjouterArticle {
	public static final Message reveil = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueGestionAjouterArticle))
				return;
			VueGestionAjouterArticle vue = (VueGestionAjouterArticle)caster;
			
			Connection connection = Commander.getInstance().getConnectionBD();
			CategorieArticleCrud categorieArticleCrud = new CategorieArticleCrud(connection);
			List<Categorie_article> categorieArticle = categorieArticleCrud.readAll();
			
			String temporaire = vue.getComboBoxCategorie();
			
			vue.clearComboBoxCategorie();
			
			for(int i=0;i<categorieArticle.size();i++)
			{
				vue.addComboBoxCategorie(categorieArticle.get(i).getCategorie_article_description());
			}
			
			if(temporaire != "")
			{
				vue.setSelectedCategorie(temporaire);
			}
		}
	};
	

	public static final Message ajouter = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueGestionAjouterArticle))
				return;
			VueGestionAjouterArticle vue = (VueGestionAjouterArticle)caster;
			if(!vue.isInputDataValid())
				return;
			
			Connection connection = Commander.getInstance().getConnectionBD();
			
			String categorie = vue.getComboBoxCategorie(),
				   code = vue.getTextFieldCode(),
				   description = vue.getTextFieldDescription();
			
			boolean taxable = vue.getChkBoxTaxable(),
					actif = vue.getChkBoxActif();
			
			CategorieArticleCrud categorieArticleCrud = new CategorieArticleCrud(connection);
			List<Categorie_article> categorieArticle = categorieArticleCrud.readAllLike(categorie);
			ArticleCrud articleCrud = new ArticleCrud(connection);
			
			connection.setAutoCommit(false);
			Article article = new Article(articleCrud.getNewSequenceId(), code, description, taxable, categorieArticle.get(0).getcategorie_article_p_id(), actif);
			articleCrud.create(article);
			connection.commit();
			connection.setAutoCommit(true);
			
			Language lang = Commander.getInstance().getLanguage();
						
			categorieArticle = categorieArticleCrud.readAll();
			Categorie_article categorieArticleSelectionne = categorieArticleCrud.readById(article.getCategorie_fk_id()); 
			
			VueGestionModifierArticle vueDest = (VueGestionModifierArticle) Commander.getInstance().getVuePrincipale().setSelectedTab(lang.getPrincipaleGestion(), lang.getGestionModifierArticPromo());
			vueDest.setArticle_Modification_ID(article.getarticle_p_id());
			vueDest.AddDataToFields(categorieArticle, categorieArticleSelectionne.getCategorie_article_description(), code, description, taxable, actif);
			
			vue.ClearInfo();
			
			vueDest.setEnabled(true);
		}
	};
	

	public static final Message annuler = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueGestionAjouterArticle))
				return;
			VueGestionAjouterArticle vue = (VueGestionAjouterArticle)caster;
			vue.ClearInfo();
		}
	};
}
