package controler.recherche;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.swing.JFrame;

import language.Francais;
import view.vueRechercheChambre.VueRechercheChambre;

import commander.Commander;

import controler.Controler;
import controler.Message;
import database.crud.ChambreCrud;
import database.dataset.Chambre;


public class ControlerRechercheChambreLibre{
	/***********************propriete********************************/

	/***********************constructeur********************************/
	private ControlerRechercheChambreLibre() {
	}
	/***********************singleton********************************/
	/***********************factory********************************/


	/***********************message********************************/
	public static final Message recherche = new Message(){
		@Override
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueRechercheChambre))
				return;
			VueRechercheChambre vue = (VueRechercheChambre)caster;
			ChambreCrud chambreCrud = new ChambreCrud(Commander.getInstance().getConnectionBD());
			List<Chambre> chambresLibre = chambreCrud.readAllLike(vue.getSelectedLits(), vue.getSelectedAvantArriere(), vue.getSelectedEtage(), vue.getDateDepart(), vue.getDateArrivee());
			List<Chambre> chambres = chambreCrud.readAll();
			
			String temporaireEtage = vue.getSelectedEtage(),
				   temporaireLits = vue.getSelectedLits(); 
			
			vue.clearEtage();
			vue.clearNombredeLits();
			
//			vue.setSelectedEtage("");
//			vue.setSelectedLits("");

			Set<Object> dejaAjouter = new HashSet<>();
			dejaAjouter.add("");
			vue.addEtage("");
			vue.addNombredeLits("");
			
			for (Chambre chambre : chambres){
				//combo etage
				if (!dejaAjouter.contains("etage"+chambre.getChambre_nombreEtage())){
					dejaAjouter.add("etage"+chambre.getChambre_nombreEtage());
					vue.addEtage(""+chambre.getChambre_nombreEtage());
				}
				//combo lits
				if (!dejaAjouter.contains("lit"+chambre.getChambre_nombredelits())){
					dejaAjouter.add("lit"+chambre.getChambre_nombredelits());
					vue.addNombredeLits(""+chambre.getChambre_nombredelits());
				}				
			}
			
			vue.setSelectedEtage(temporaireEtage);
			vue.setSelectedLits(temporaireLits);
			
			vue.clearChambre();
			for(Chambre ChambreLibre : chambresLibre)
			{
				vue.addLineToTableChambre(ChambreLibre.getChambre_numero(), 
						ChambreLibre.getChambre_nombreEtage(), 
						ChambreLibre.isChambre_devantlhotel(), 
						ChambreLibre.getChambre_nombredelits(), 
						ChambreLibre.getChambre_description());
			}

		}
	};
	
	public static final Message reveil = new Message(){
		@Override
		public void trigger(Object caster) throws Exception {
			recherche.trigger(caster);
			/*if (!(caster instanceof VueRechercheChambre))
				return;
			VueRechercheChambre vue = (VueRechercheChambre)caster;
			ChambreCrud chambreCrud = new ChambreCrud(Commander.getInstance().getConnectionBD());
			List<Chambre> chambres = chambreCrud.readAll();
			
			vue.setSelectedEtage("");
			vue.setSelectedLits("");

			Set<Object> dejaAjouter = new HashSet<>();
			for (Chambre chambre : chambres){
				//combo etage
				if (!dejaAjouter.contains("etage"+chambre.getChambre_nombreEtage())){
					dejaAjouter.add("etage"+chambre.getChambre_nombreEtage());
					vue.addEtage(""+chambre.getChambre_nombreEtage());
				}
				//combo lits
				if (!dejaAjouter.contains("lit"+chambre.getChambre_nombredelits())){
					dejaAjouter.add("lit"+chambre.getChambre_nombredelits());
					vue.addNombredeLits(""+chambre.getChambre_nombredelits());
				}
				//liste de chambre
				vue.addLineToTableChambre(chambre.getChambre_numero(), 
						           chambre.getChambre_nombreEtage(), 
						           chambre.isChambre_devantlhotel(), 
						           chambre.getChambre_nombredelits(), 
						           chambre.getChambre_description());
			}*/

		}		
	};
	

	/***********************getter setter********************************/
	
	/***********************test
	 * @throws Exception ********************************/

	public static void main(String ... arg) throws Exception{
		
		JFrame a = new JFrame("window");

		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;
		
		VueRechercheChambre vue = new VueRechercheChambre(Francais.getInstance(),null);
		
		a.add(vue,contraint);
		a.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		a.pack();
		a.setVisible(true);

		vue.getObservable().addObserver(Controler.getInstance());
		ControlerRechercheChambreLibre.reveil.trigger(vue);
	}
}
