package controler.recherche;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import language.Language;
import view.vueAjoutClient.AjoutClient;
import view.vueAjoutClient.ModifierClient;
import view.vueAjoutVille.ModifierVille;
import view.vueRechercheVille.VueRechercheVille;

import commander.Commander;

import controler.Message;
import database.crud.VilleCrud;
import database.dataset.Ville;


public class ControlerRechercheVille{
	/***********************propriete********************************/

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


	/***********************message********************************/
	public static final Message utiliserPourNouveauClient = new Message(){
		@Override
		public void trigger(Object caster) throws SQLException, Exception {
			if (!(caster instanceof VueRechercheVille))
				return;
			VueRechercheVille vue = (VueRechercheVille)caster;
			
			Language lang = Commander.getInstance().getLanguage();
			AjoutClient vueDest = (AjoutClient)Commander.getInstance().getVuePrincipale().setSelectedTab(lang.getPrincipaleReception(), lang.getReceptionClientAjouter());
			Connection connection = Commander.getInstance().getConnectionBD();
			
			VilleCrud villeCrud = new VilleCrud(connection);
			Ville ville = villeCrud.readById(vue.getSelectedVille());
			
			vueDest.setVille_id(vue.getSelectedVille());
			vueDest.setVilleNom(ville.getVille_nom());
		}
	};
	
	public static final Message utiliserPourModifierClient = new Message(){
		@Override
		public void trigger(Object caster) throws SQLException, Exception {
			if (!(caster instanceof VueRechercheVille))
				return;
			VueRechercheVille vue = (VueRechercheVille)caster;

			Language lang = Commander.getInstance().getLanguage();
			ModifierClient vueDest = (ModifierClient)Commander.getInstance().getVuePrincipale().setSelectedTab(lang.getPrincipaleReception(), lang.getReceptionClientModifier());
			Connection connection = Commander.getInstance().getConnectionBD();

			VilleCrud villeCrud = new VilleCrud(connection);
			Ville ville = villeCrud.readById(vue.getSelectedVille());
			
			vueDest.setVille_id(vue.getSelectedVille());
			vueDest.setVilleNom(ville.getVille_nom());
		}
	};
	
	public static final Message modifier = new Message(){
		@Override
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueRechercheVille))
				return;
			VueRechercheVille vue = (VueRechercheVille)caster;
			
			if(!vue.hasRowSelected())
				return;
			
			Language lang = Commander.getInstance().getLanguage();
			ModifierVille vueDest = (ModifierVille)Commander.getInstance().getVuePrincipale().setSelectedTab(lang.getPrincipaleReception(), lang.getReceptionVilleModifier());
			Connection connection = Commander.getInstance().getConnectionBD();
			
			int ville_id = vue.getSelectedVille();
			
			VilleCrud villeCrud = new VilleCrud(connection);
			Ville ville = villeCrud.readById(ville_id);
			
			vueDest.setVille_id(ville_id);
			vueDest.addDataToFields(ville.getVille_nom(), ville.getVille_province(), ville.getVille_pays());
			
			vueDest.setEnabled(true);
		}
	};
	
	public static final Message recherche = new Message(){
		@Override
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueRechercheVille))
				return;
			VueRechercheVille vue = (VueRechercheVille)caster;
			VilleCrud villeCrud = new VilleCrud(Commander.getInstance().getConnectionBD());
			String nom = vue.getTextFieldVille();
			String province = vue.getTextFieldProvince();
			String pays = vue.getTextFieldPays();
							
			List<Ville> villes = villeCrud.readAllLike(nom, province, pays);
			vue.clear();
			
			vue.clearTableArticle();
			for (Ville ville : villes){
				//liste de villes trouve
				vue.addLineToTableVille(ville.getville_p_id(),
										ville.getVille_nom(),
									    ville.getVille_province(),
									    ville.getVille_pays());
			}
		}
	};
	
	public static final Message reveil = new Message(){
		@Override
		public void trigger(Object caster) throws Exception {
			recherche.trigger(caster);
		}		
	};
	


}
