/**
 * 
 */
package view.FactoryPrincipale;

import language.Francais;
import language.Language;
import view.Fenetre;
import view.OngletDeGauche;
import view.OngletSuperieur;
import view.vueGestionArticle.VueGestionAjouterArticle;
import view.vueGestionArticle.VueGestionModifierArticle;
import view.vueGestionConstante.VueGestionConstante;
import view.vueGestionEmploye.VueGestionAjouterUtilisateur;
import view.vueGestionEmploye.VueGestionModifierUtilisateur;
import view.vueGestionTaxe.VueGestionTaxe;
import view.vueRapportArriveeDepart.VueRapportArriveeDepart;
import view.vueRapportDepot.VueRapportDepot;
import view.vueRapportFacture.VueRapportFacture;
import view.vueRapportFermeture.VueRapportFermeture;
import view.vueRapportStatistique.VueRapportStatistique;
import controler.Controler;
import controler.gestion.ControlerGestionAjouterArticle;
import controler.gestion.ControlerGestionAjouterUtilisateur;
import controler.gestion.ControlerGestionModifierArticle;
import controler.gestion.ControlerGestionModifierUtilisateur;
import controler.gestion.ControlerGestionTaxe;
import controler.gestion.ControlerGestionConstante;
import controler.rapport.ControlerRapportArriveDepart;
import controler.rapport.ControlerRapportDepot;
import controler.rapport.ControlerRapportFacture;
import controler.rapport.ControlerRapportFermeture;
import controler.rapport.ControlerRapportStatistique;

/**
 * @author alexis
 *
 */
public class PrincipaleGestionFactory extends PrincipaleReceptionFactory implements PrincipaleFactory {

	/**
	 * 
	 */
	public PrincipaleGestionFactory() {}
	
	public static OngletDeGauche buildRapport(Language lang) throws Exception{
		//creer les vue
		VueRapportArriveeDepart vueRapportArriveeDepart = new VueRapportArriveeDepart(lang,null);
		VueRapportFermeture vueRapportFermeture = new VueRapportFermeture(lang,null);
		VueRapportDepot vueRapportDepot = new VueRapportDepot(lang,null);
		VueRapportFacture vueRapportFacture = new VueRapportFacture(lang,null);
		VueRapportStatistique vueRapportStatistique = new VueRapportStatistique(lang,null);
		//creer la tab 
		OngletDeGauche principeRapport = new OngletDeGauche();
		//creer les soustabs
		principeRapport.addJPanelObservable( lang.getRapportArrivDepart(), vueRapportArriveeDepart, ControlerRapportArriveDepart.reveil);
		principeRapport.addJPanelObservable( lang.getRapportFermeture(), vueRapportFermeture, ControlerRapportFermeture.reveil);
		principeRapport.addJPanelObservable( lang.getRapportDepot(), vueRapportDepot, ControlerRapportDepot.reveil);
		principeRapport.addJPanelObservable( lang.getRapportFacture(), vueRapportFacture, ControlerRapportFacture.reveil);
		principeRapport.addJPanelObservable( lang.getRapportStatistique(), vueRapportStatistique, ControlerRapportStatistique.reveil);
		//ajouter les observateurs
		principeRapport.getObservable().addObserver(Controler.getInstance());

		vueRapportArriveeDepart.getObservable().addObserver(Controler.getInstance());
		vueRapportFermeture.getObservable().addObserver(Controler.getInstance());
		vueRapportDepot.getObservable().addObserver(Controler.getInstance());
		vueRapportFacture.getObservable().addObserver(Controler.getInstance());
		vueRapportStatistique.getObservable().addObserver(Controler.getInstance());
		//ajouter des bouttons
		vueRapportArriveeDepart.addButton(lang.getRapportArrivDepartRefresh(), ControlerRapportArriveDepart.reveil);
		vueRapportArriveeDepart.addButton(lang.getRapportArrivDepartImprimer(), ControlerRapportArriveDepart.imprimer);
		vueRapportFermeture.addButton(lang.getRapportArrivDepartRefresh(), ControlerRapportFermeture.reveil);
		vueRapportFermeture.addButton(lang.getRapportFermetureImprimer(), ControlerRapportFermeture.imprimer);
		vueRapportFermeture.addButton(lang.getRapportFermetureSelection(), ControlerRapportFermeture.selectionner);
		vueRapportFermeture.addButton(lang.getRapportFermetureAnnuler(), ControlerRapportFermeture.annuler);
		vueRapportFermeture.addButton(lang.getRapportFermetureFermer(), ControlerRapportFermeture.fermer);
		vueRapportFacture.addButton(lang.getRapportFactureImprimer(), ControlerRapportFacture.imprimer);
		vueRapportFacture.addButton(lang.getRapportFactureRechercher(), ControlerRapportFacture.rechercher);
		vueRapportDepot.addButton(lang.getRapportDepotImprimer(), ControlerRapportDepot.imprimer);
		vueRapportDepot.addButton(lang.getRapportDepotSelection(), ControlerRapportDepot.selectionner);
		vueRapportDepot.addButton(lang.getRapportDepotAnnuler(), ControlerRapportDepot.annuler);
		vueRapportDepot.addButton(lang.getRapportDepotFermer(), ControlerRapportDepot.fermer);
		vueRapportStatistique.addButton(lang.getRapportStatistiqueImprimer(), ControlerRapportStatistique.imprimer);

		//retourner la tab
		return principeRapport;
	}
	
	public static OngletDeGauche buildGestion(Language lang){
		VueGestionAjouterArticle vueGestionAjouterArticle = new VueGestionAjouterArticle(lang,null);
		VueGestionModifierArticle vueGestionModifierArticle = new VueGestionModifierArticle(lang,ControlerGestionModifierArticle.dataChanged);
		VueGestionAjouterUtilisateur vueGestionAjouterUtilisateur = new VueGestionAjouterUtilisateur(lang,null);
		VueGestionModifierUtilisateur vueGestionModifierUtilisateur = new VueGestionModifierUtilisateur(lang,ControlerGestionModifierUtilisateur.dataChanged);
		VueGestionConstante vueGestionConstante = new VueGestionConstante(lang,ControlerGestionConstante.dataChanged);
		VueGestionTaxe vueGestionTaxe = new VueGestionTaxe(lang,ControlerGestionTaxe.dataChanged);
		
		OngletDeGauche principeGestion = new OngletDeGauche();

		principeGestion.addJPanelObservable(lang.getGestionAjouterArticPromo(), vueGestionAjouterArticle, ControlerGestionAjouterArticle.reveil);
		principeGestion.addJPanelObservable(lang.getGestionModifierArticPromo(), vueGestionModifierArticle, ControlerGestionModifierArticle.reveil);
		principeGestion.addJPanelObservable(lang.getGestionAjouterUtilisateur(), vueGestionAjouterUtilisateur, ControlerGestionAjouterUtilisateur.reveil);
		principeGestion.addJPanelObservable(lang.getGestionModifierUtilisateur(), vueGestionModifierUtilisateur, ControlerGestionModifierUtilisateur.reveil);
		
		principeGestion.addJPanelObservable(lang.getGestionConstantes(), vueGestionConstante, "message constantes");
		principeGestion.addJPanelObservable(lang.getGestionConstantes(), vueGestionConstante, ControlerGestionConstante.reveil);
		principeGestion.addJPanelObservable(lang.getGestionTaxes(), vueGestionTaxe, ControlerGestionTaxe.reveil);
		
		principeGestion.getObservable().addObserver(Controler.getInstance());
		
		vueGestionAjouterArticle.getObservable().addObserver(Controler.getInstance());
		vueGestionModifierArticle.getObservable().addObserver(Controler.getInstance());
		
		vueGestionAjouterUtilisateur.getObservable().addObserver(Controler.getInstance());
		vueGestionModifierUtilisateur.getObservable().addObserver(Controler.getInstance());
		
		vueGestionConstante.getObservable().addObserver(Controler.getInstance());
		vueGestionTaxe.getObservable().addObserver(Controler.getInstance());
		
		vueGestionAjouterArticle.addButton(lang.getGestionArticle_Ajouter(), ControlerGestionAjouterArticle.ajouter);
		vueGestionAjouterArticle.addButton(lang.getGestionArticle_Annuler(), ControlerGestionAjouterArticle.annuler);
		vueGestionModifierArticle.addButton(lang.getGestionArticle_Modifier(), ControlerGestionModifierArticle.modifier);
		vueGestionModifierArticle.addButton(lang.getGestionArticle_Annuler(), ControlerGestionModifierArticle.annuler);
		vueGestionAjouterUtilisateur.addButton(lang.getGestionUtilisateur_Ajouter(), ControlerGestionAjouterUtilisateur.ajouter);
		vueGestionAjouterUtilisateur.addButton(lang.getGestionUtilisateur_Annuler(), ControlerGestionAjouterUtilisateur.annuler);
		vueGestionModifierUtilisateur.addButton(lang.getGestionUtilisateur_Modifier(), ControlerGestionModifierUtilisateur.modifier);
		vueGestionModifierUtilisateur.addButton(lang.getGestionUtilisateur_Annuler(), ControlerGestionModifierUtilisateur.annuler);
		vueGestionModifierUtilisateur.addButton(lang.getGestionUtilisateur_ResetPassWord(), ControlerGestionModifierUtilisateur.resetPassWord);
		vueGestionConstante.addButton(lang.getGestionConstante_Enregistrer(), ControlerGestionConstante.enregistrer);
		vueGestionConstante.addButton(lang.getGestionConstante_Annuler(), ControlerGestionConstante.annuler);
		vueGestionTaxe.addButton(lang.getGestionTaxes_Enregistrer(),ControlerGestionTaxe.enregistrer);
		vueGestionTaxe.addButton(lang.getGestionTaxes_Annuler(),ControlerGestionTaxe.annuler);

		return principeGestion;
	}
	
	public OngletSuperieur build(Language lang) throws Exception{
		
		OngletSuperieur principe = new OngletSuperieur();

		//*onglet plan*/
		principe.addSubTab(lang.getPrincipalePlan(),buildPlan(lang));

		/*onglet reception*/
		principe.addSubTab(lang.getPrincipaleReception(), buildReception(lang));

		/*onglet recherche*/
		principe.addSubTab(lang.getPrincipaleRecherche(), buildRecherche(lang));

		/*onglet rapport*/
		principe.addSubTab(lang.getPrincipaleRapport(), buildRapport(lang));
		
		/*onglet gestion*/
		principe.addSubTab(lang.getPrincipaleGestion(), buildGestion(lang));

		/*preloader la page courrante*/
		principe.setSelectedTab(lang.getPrincipalePlan(), lang.getPrincipalePlan());
		
		
		return principe;
	}
	
	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		Fenetre a = new Fenetre(Francais.getInstance(),"Denise Rivard");
		a.setPrincipale(new PrincipaleGestionFactory().build(Francais.getInstance()));
		a.setNom("Billy");
		a.setEnteteVisible(true);
	}
}