package controler.recherche;

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

import language.Language;
import tool.regEx.Adresse;
import view.vueAjoutClient.ModifierClient;
import view.vueRechercheClient.VueRechercheClient;

import commander.Commander;

import controler.Message;
import database.crud.AdresseCrud;
import database.crud.ClientCrud;
import database.crud.GroupeCrud;
import database.crud.TelephoneCrud;
import database.crud.VilleCrud;
import database.dataset.Client;
import database.dataset.Groupe;
import database.dataset.Telephone;
import database.dataset.Ville;

public class ControlerRechercheClient {
	private ControlerRechercheClient() {
		
	}
	
	public static final Message reveil = new Message(){
		public void trigger(Object caster) throws Exception {
			recherche.trigger(caster);
		}
	};
	
	public static final Message recherche = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueRechercheClient))
				return;
			VueRechercheClient vue = (VueRechercheClient)caster;

			ClientCrud clientCrud = new ClientCrud(Commander.getInstance().getConnectionBD());
			AdresseCrud adresseCrud = new AdresseCrud(Commander.getInstance().getConnectionBD());
			VilleCrud villeCrud = new VilleCrud(Commander.getInstance().getConnectionBD());
			TelephoneCrud telephoneCrud = new TelephoneCrud(Commander.getInstance().getConnectionBD());
			
			String nom = vue.getTextFieldNom();
			String prenom = vue.getTextFieldPrenom();
			String telephone = vue.getTextFieldTelephone();
			String adresse = vue.getTextFieldAdresse();
			
			List<Client> clients = clientCrud.readAllLike(nom, prenom, adresse, "", "", "", "", "", telephone);
			vue.clearClient();
			
			for(Client client : clients)
			{
				Adresse adresses = adresseCrud.readById(client.getAdresse_fk_id());
				Ville villes = villeCrud.readById(adresses.getVille_fk_id());
				List<Telephone> telephones = telephoneCrud.readByFk_client(client.getClient_p_id());
				vue.addLineToTableClient(client.getClient_p_id(), 
										 client.getClient_nom(), 
										 client.getClient_prenom(), 
										 adresses.getadresse_no_rue_app(), 
										 adresses.getAdresse_codepostal(),
										 villes.getVille_nom(), 
										 villes.getVille_province(), 
										 telephones.get(0).getTelephone_numero());
			}
		}
	};
	
	public static final Message modifier = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueRechercheClient))
				return;
			
			VueRechercheClient vue = (VueRechercheClient)caster;
			
			if(!vue.hasRowSelected())
				return;
			
			Language lang = Commander.getInstance().getLanguage();
			ModifierClient vueDest = (ModifierClient)Commander.getInstance().getVuePrincipale().setSelectedTab(lang.getPrincipaleReception(), lang.getReceptionClientModifier());
			Commander.getInstance().getVuePrincipale().setModifiedTab(lang.getPrincipaleReception(), lang.getReceptionClientModifier(),true);	
			
			int clientID = vue.getSelectedClient();
			
			Connection connection = Commander.getInstance().getConnectionBD();
			
			ClientCrud clientCrud = new ClientCrud(connection);
			AdresseCrud adresseCrud = new AdresseCrud(connection);
			VilleCrud villeCrud = new VilleCrud(connection);
			GroupeCrud groupeCrud = new GroupeCrud(connection);
			TelephoneCrud telephoneCrud = new TelephoneCrud(connection);
			
			Client client = clientCrud.readById(clientID);
			Adresse adresse = adresseCrud.readById(client.getAdresse_fk_id());
			Ville ville = villeCrud.readById(adresse.getVille_fk_id());
			List<Telephone> telephones = telephoneCrud.readByFk_client(client.getClient_p_id());
			List<Groupe> groupes = groupeCrud.readByFk_client(client.getClient_p_id());

			String [] telephoneStrArr = new String[telephones.size()],
					  groupeStrArr = new String[groupes.size()];
			for (int i=0; i<telephones.size(); i++)
				telephoneStrArr[i] = telephones.get(i).getTelephone_numero();
			for (int i=0; i<groupes.size(); i++)
				groupeStrArr[i] = groupes.get(i).getGroupe_nom();
			
			vueDest.clearInfo();
			vueDest.setClient_id(client.getClient_p_id());
			vueDest.setVille_id(ville.getville_p_id());
			vueDest.addDataToFields(client.getClient_prenom(), 
					                client.getClient_nom(), 
					                adresse.getadresse_no_rue_app(), 
					                adresse.getAdresse_codepostal(), 
					                ville.getVille_nom(), 
					                groupeStrArr, 
					                telephoneStrArr, 
					                client.getClient_commentaire()); 
		}
	};
	
	public static final Message creerFacture = new Message(){
		public void trigger(Object caster) throws Exception {
		
		}
	};
}
