/**
 * 
 */
package view.FactoryPrincipale;

import language.Francais;
import language.Language;
import view.Fenetre;
import view.OngletDeGauche;
import view.OngletSuperieur;
import view.vueAjoutClient.AjoutClient;
import view.vueAjoutClient.ModifierClient;
import view.vueAjoutVille.AjoutVille;
import view.vueAjoutVille.ModifierVille;
import view.vueFacture.VueFacture;
import view.vueRechercheArticle.VueRechercheArticle;
import view.vueRechercheChambre.VueRechercheChambre;
import view.vueRechercheClient.VueRechercheClient;
import view.vueRechercheFacture.VueRechercheFacture;
import view.vueRechercheFermeture.VueRechercheFermeture;
import view.vueRechercheGroupe.VueRechercheGroupe;
import view.vueRechercheReservation.VueRechercheReservation;
import view.vueRechercheUtilisateur.VueRechercheUtilisateur;
import view.vueRechercheVille.VueRechercheVille;
import view.vueSelectorDateChambre.SelecteurDateChambre;
import controler.Controler;
import controler.client.ControlerAjoutClient;
import controler.client.ControlerModifierClient;
import controler.facture.ControlerFacture;
import controler.plan.ControlerPlan;
import controler.recherche.ControlerRechercheChambreLibre;
import controler.recherche.ControlerRechercheClient;
import controler.recherche.ControlerRechercheFacture;
import controler.recherche.ControlerRechercheFermeture;
import controler.recherche.ControlerRechercheGroupe;
import controler.recherche.ControlerRecherchePromotionArticle;
import controler.recherche.ControlerRechercheReservation;
import controler.recherche.ControlerRechercheUtilisateur;
import controler.recherche.ControlerRechercheVille;
import controler.ville.ControlerAjoutVille;
import controler.ville.ControlerModifierVille;

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

	/**
	 * 
	 */
	public PrincipaleReceptionFactory() {}

	public static OngletDeGauche buildPlan(Language lang){
		//creer les vue
		SelecteurDateChambre vuePlan = new SelecteurDateChambre(lang);
		//creer la tab
		OngletDeGauche principePlan = new OngletDeGauche();
		//creer la soustab
		principePlan.addJPanelObservable(lang.getPrincipalePlan(), vuePlan, ControlerPlan.reveil);
		//ajouter l observateur
		principePlan.getObservable().addObserver(Controler.getInstance());

		vuePlan.getObservable().addObserver(Controler.getInstance());
		//connecter le boutton
		vuePlan.addButton(lang.getPlanAjouter(), ControlerPlan.ajouter);
		vuePlan.addButton(lang.getPlanNouveau(), ControlerPlan.nouveau);
		vuePlan.connecterUneAction("SelectionDate", ControlerPlan.reveil);
		//retourner la tab
		return principePlan;
	}
	
	public static OngletDeGauche buildReception(Language lang) throws Exception{
		VueFacture vueFacture = new VueFacture(lang);
		OngletDeGauche principeReception = new OngletDeGauche();
		principeReception.addJPanelObservable(lang.getReceptionFacture(), vueFacture, ControlerFacture.reveil);
		principeReception.getObservable().addObserver(Controler.getInstance());
		vueFacture.addButton(lang.getFactureSelection(), ControlerFacture.selectioner);
		vueFacture.addButton(lang.getFactureCreerVente(), ControlerFacture.creerVente);
		vueFacture.addButton(lang.getFactureAnnuler(), ControlerFacture.annuler);
		vueFacture.addButton(lang.getFactureCheckin(), ControlerFacture.checkin);
		vueFacture.addButton(lang.getFactureCheckout(), ControlerFacture.checkout);
		vueFacture.addButton(lang.getFactureImprimer(), ControlerFacture.imprimer);
		vueFacture.addButton(lang.getFacturePaiement(), ControlerFacture.paiement);
		vueFacture.addButton(lang.getFactureEnregistrer(), ControlerFacture.enregistrer);
		
		vueFacture.getObservable().addObserver(Controler.getInstance());
		
		AjoutClient vueAjoutClient = new AjoutClient(lang);
		principeReception.addJPanelObservable(lang.getReceptionClientAjouter(), vueAjoutClient, ControlerAjoutClient.reveil);

		vueAjoutClient.getObservable().addObserver(Controler.getInstance());
		vueAjoutClient.addButton(lang.getReceptionClientAjouterChoisirUneVille(), ControlerAjoutClient.choisirVille);
		vueAjoutClient.addButton(lang.getClientAjouter(), ControlerAjoutClient.ajouter);
		vueAjoutClient.addButton(lang.getClientAnnuler(), ControlerAjoutClient.annuler);
		
		ModifierClient vueModifierClient = new ModifierClient(lang);
		principeReception.addJPanelObservable(lang.getReceptionClientModifier(), vueModifierClient, ControlerModifierClient.reveil);
		vueModifierClient.getObservable().addObserver(Controler.getInstance());
		vueModifierClient.addButton(lang.getReceptionClientModifierChoisirUneVille(), ControlerModifierClient.choisirVille);
		vueModifierClient.addButton(lang.getClientMettreAJour(), ControlerModifierClient.enregistrer);
		vueModifierClient.addButton(lang.getClientAnnuler(), ControlerModifierClient.annuler);
		
		AjoutVille vueAjoutVille = new AjoutVille(lang);
		principeReception.addJPanelObservable(lang.getReceptionVilleAjouter(), vueAjoutVille, ControlerAjoutVille.reveil);
		vueAjoutVille.getObservable().addObserver(Controler.getInstance());
		vueAjoutVille.addButton(lang.getVilleAjouter(), ControlerAjoutVille.ajouter);
		vueAjoutVille.addButton(lang.getVilleAnnuler(), ControlerAjoutVille.annuler);
		
		ModifierVille vueModifierVille = new ModifierVille(lang);
		principeReception.addJPanelObservable(lang.getReceptionVilleModifier(), vueModifierVille, ControlerModifierVille.reveil);
		vueModifierVille.getObservable().addObserver(Controler.getInstance());
		vueModifierVille.addButton(lang.getVilleModifier(), ControlerModifierVille.modifier);
		vueModifierVille.addButton(lang.getVilleAnnuler(), ControlerModifierVille.annuler);
		vueModifierVille.addButton(lang.getVilleUtiliserPourAjoutClient(), ControlerModifierVille.utiliserPourModifierClient);
		vueModifierVille.addButton(lang.getVilleUtiliserPourModifierClient(), ControlerModifierVille.utiliserPourNouveauClient);
		
		return principeReception;
	}
	
	public static OngletDeGauche buildRecherche(Language lang) throws Exception{
		//creer les vue
		VueRechercheClient vueRechercheClient = new VueRechercheClient(lang);
		VueRechercheChambre vueRechercheChambre = new VueRechercheChambre(lang);
		VueRechercheReservation vueRechercheReservation = new VueRechercheReservation(lang);
		VueRechercheFacture vueRechercheFacture = new VueRechercheFacture(lang);
		VueRechercheFermeture vueRechercheFermeture = new VueRechercheFermeture(lang);
		VueRechercheGroupe vueRechercheGroupe = new VueRechercheGroupe(lang);
		VueRechercheUtilisateur vueRechercheUtilisateur = new VueRechercheUtilisateur(lang);
		VueRechercheArticle vueRechercheArticle = new VueRechercheArticle(lang);
		VueRechercheVille vueRechercheVille = new VueRechercheVille(lang);
		//creer la tab
		OngletDeGauche principeRecherche = new OngletDeGauche();
		//creer les sous tab
		principeRecherche.addJPanelObservable(lang.getRechercheClient(), vueRechercheClient, ControlerRechercheClient.reveil);
		principeRecherche.addJPanelObservable(lang.getRechercheChambre(), vueRechercheChambre, ControlerRechercheChambreLibre.reveil);
		principeRecherche.addJPanelObservable(lang.getRechercheReservation(), vueRechercheReservation, ControlerRechercheReservation.reveil);
		principeRecherche.addJPanelObservable(lang.getRechercheFacture(), vueRechercheFacture, ControlerRechercheFacture.reveil);
		principeRecherche.addJPanelObservable(lang.getRechercheFermeture(), vueRechercheFermeture, ControlerRechercheFermeture.reveil);
		principeRecherche.addJPanelObservable(lang.getRechercheGroupe(), vueRechercheGroupe, ControlerRechercheGroupe.reveil);
		principeRecherche.addJPanelObservable(lang.getRechercheUtilisateur(), vueRechercheUtilisateur, ControlerRechercheUtilisateur.reveil);
		principeRecherche.addJPanelObservable(lang.getRechercheArticPromo(), vueRechercheArticle, ControlerRecherchePromotionArticle.reveil);
		principeRecherche.addJPanelObservable(lang.getRecherche_Ville(), vueRechercheVille, ControlerRechercheVille.reveil);
		//ajouter les observateurs
		principeRecherche.getObservable().addObserver(Controler.getInstance());

		vueRechercheClient.getObservable().addObserver(Controler.getInstance());
		vueRechercheChambre.getObservable().addObserver(Controler.getInstance());
		vueRechercheReservation.getObservable().addObserver(Controler.getInstance());
		vueRechercheFacture.getObservable().addObserver(Controler.getInstance());
		vueRechercheFermeture.getObservable().addObserver(Controler.getInstance());
		vueRechercheGroupe.getObservable().addObserver(Controler.getInstance());
		vueRechercheUtilisateur.getObservable().addObserver(Controler.getInstance());
		vueRechercheArticle.getObservable().addObserver(Controler.getInstance());
		vueRechercheVille.getObservable().addObserver(Controler.getInstance());
		//connecter les bouttons
		vueRechercheClient.addButton(lang.getRechercheclientCreerfacture(), ControlerRechercheClient.creerFacture);
		vueRechercheClient.addButton(lang.getRechercheClient_Recherche(), ControlerRechercheClient.recherche);
		vueRechercheClient.addButton(lang.getRechercheClient_Modifier(), ControlerRechercheClient.modifier);

		vueRechercheChambre.addButton(lang.getRechercheChambre_Recherche(), ControlerRechercheChambreLibre.recherche);

		vueRechercheReservation.addButton(lang.getRechercheReservation_Recherche(), ControlerRechercheReservation.recherche);
		vueRechercheReservation.addButton(lang.getRechercheReservation_Modifier(), ControlerRechercheReservation.modifier);
		vueRechercheFacture.addButton(lang.getRechercheFacture_Recherche(),ControlerRechercheFacture.recherche);
		vueRechercheFacture.addButton(lang.getRechercheFacture_Modifier(),ControlerRechercheFacture.modifier);
		vueRechercheFermeture.addButton(lang.getRechercheFermeture_Recherche(),ControlerRechercheFermeture.recherche);
		vueRechercheFermeture.addButton(lang.getRechercheFermeture_Modifier(),ControlerRechercheFermeture.modifier);
		vueRechercheGroupe.addButton(lang.getRechercheGroupe_Recherche(), ControlerRechercheGroupe.recherche);
		vueRechercheUtilisateur.addButton(lang.getRechercheUtilisateur_Recherche(), ControlerRechercheUtilisateur.recherche);
		vueRechercheUtilisateur.addButton(lang.getUtilisateur_Modifier(), ControlerRechercheUtilisateur.modifier);
		vueRechercheArticle.addButton(lang.getRechercheArticle_Recherche(),ControlerRecherchePromotionArticle.recherche);
		vueRechercheArticle.addButton(lang.getRechercheArticle_Modifier(),ControlerRecherchePromotionArticle.modifier);
		vueRechercheVille.addButton(lang.getRechercheVille_Recherche(), ControlerRechercheVille.recherche);
		vueRechercheVille.addButton(lang.getRechercheVille_Modifier(), ControlerRechercheVille.modifier);
		vueRechercheVille.addButton(lang.getVilleUtiliserPourAjoutClient(), ControlerRechercheVille.utiliserPourNouveauClient);
		vueRechercheVille.addButton(lang.getVilleUtiliserPourModifierClient(), ControlerRechercheVille.utiliserPourModifierClient);
		//retourner la tab
		return principeRecherche;
	}
	
	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));

		/*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 PrincipaleReceptionFactory().build(Francais.getInstance()));
		a.setNom("Billy");
		a.setEnteteVisible(true);
	}
}