package controler.recherche;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.sql.Connection;

import javax.swing.JFrame;

import language.Francais;
import language.Language;
import view.vueGestionArticle.VueGestionModifierArticle;
import view.vueRechercheArticle.VueRechercheArticle;

import commander.Commander;

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

public class ControlerRecherchePromotionArticle{

	/***************************************************************************/
	/***************************************************************************/
	
	private ControlerRecherchePromotionArticle() {
	}
	/***************************************************************************/
	/***************************************************************************/

	public final static Message reveil = new Message(){
		@Override
		public void trigger(Object caster) throws Exception {
			recherche.trigger(caster);
		}
	};


	public static final Message recherche = new Message(){
		@Override
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueRechercheArticle))
				return;
			VueRechercheArticle vue = (VueRechercheArticle)caster;
				
			ArticleCrud articleCrud = new ArticleCrud(Commander.getInstance().getConnectionBD());
			CategorieArticleCrud categorieCrud = new CategorieArticleCrud(Commander.getInstance().getConnectionBD());
			
			String code = vue.getTextFieldCode();
			String description = vue.getTextFieldDescription();
			String taxable = vue.getSelectedTaxable();
			String actif = vue.getSelectedActif();
			String categorie = vue.getTextFieldNomCategorie();
			
			vue.clearTableArticle();
			for (Article article : articleCrud.readAllLike(code, 
					                                       description, 
					                                       taxable, 
					                                       actif, 
					                                       categorie)){
				Categorie_article categorieArticle = categorieCrud.readById(article.getCategorie_fk_id());
				
				vue.addLineToTableArticle(article.getarticle_p_id(), 
						                  article.getArticle_code(), 
						                  article.getArticle_description(), 
						                  article.isArticle_taxable(), 
						                  article.isArticle_actif(), 
						                  categorieArticle.getCategorie_article_description());
			}
		}
	};
	
	public static final Message modifier = new Message(){
		@Override
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueRechercheArticle))
				return;
			VueRechercheArticle vue = (VueRechercheArticle)caster;
			
			if(!vue.hasRowSelected())
				return;
			
			Language lang = Commander.getInstance().getLanguage();
			VueGestionModifierArticle vueDest = (VueGestionModifierArticle)Commander.getInstance().getVuePrincipale().setSelectedTab(lang.getPrincipaleGestion(), 
													lang.getGestionModifierArticPromo());
			Commander.getInstance().getVuePrincipale().setModifiedTab(lang.getPrincipaleGestion(), lang.getGestionModifierArticPromo(),true);	
			Connection connection = Commander.getInstance().getConnectionBD();
			
			ArticleCrud articleCrud = new ArticleCrud(connection);
			CategorieArticleCrud categorieCrud = new CategorieArticleCrud(connection);
			
			Article article = articleCrud.readById(vue.getSelectedArticle());
			Categorie_article categorie = categorieCrud.readById(article.getCategorie_fk_id());
			
			vueDest.AddDataToFields(categorieCrud.readAll(), categorie.getCategorie_article_description(), article.getArticle_code(), article.getArticle_description(), article.isArticle_taxable(), article.isArticle_actif());
		}
	};

	/***************************************************************************/
	/***************************************************************************/
	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		JFrame a = new JFrame("window");
	
		VueRechercheArticle fer = new VueRechercheArticle(Francais.getInstance());
		a.setLayout(new GridBagLayout());
		
		GridBagConstraints contraint = new GridBagConstraints();
		contraint.fill = GridBagConstraints.BOTH;
		contraint.weightx = 1.0;
		contraint.weighty = 1.0;
		contraint.gridx = 0;
		contraint.gridy = 0;
		
		a.add(fer,contraint);

		a.setSize(a.getToolkit().getScreenSize());
		a.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		a.setExtendedState(JFrame.MAXIMIZED_BOTH);
		a.pack();
		a.setVisible(true);
		
		fer.getObservable().addObserver(Controler.getInstance());
		ControlerRecherchePromotionArticle.reveil.trigger(fer);
	}
}
