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 ControlerGestionModifierArticle {
	public static final Message reveil = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueGestionAjouterArticle))
				return;
			VueGestionModifierArticle vue = (VueGestionModifierArticle)caster;

			Connection connection = Commander.getInstance().getConnectionBD();
			
			if(vue.getArticle_Modification_ID() == 0)
			{
				vue.setEnabled(false);
			}
			else
			{
				vue.setEnabled(true);
			}
		}
	};
	

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

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

			Connection connection = Commander.getInstance().getConnectionBD();
			vue.ClearInfo();
			
			vue.setEnabled(false);
			
			Language lang = Commander.getInstance().getLanguage();
			Commander.getInstance().getVuePrincipale().setModifiedTab(lang.getPrincipaleGestion(), lang.getGestionModifierArticPromo(),false);
		}
	};
	
	public static final Message dataChanged = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueGestionAjouterArticle))
				return;
			
			Language lang = Commander.getInstance().getLanguage();
			Commander.getInstance().getVuePrincipale().setModifiedTab(lang.getPrincipaleGestion(), lang.getGestionModifierArticPromo(),true);	
		}
	};
}
