package view.vueAjoutClient;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.SwingConstants;

import language.Francais;
import language.Language;
import view.tool.JScrollList.JScrollList;
import view.tool.inputField.JValidScrollTextArea;
import view.tool.inputField.JValidTextField;
import controler.Message;

public class ModifierClient extends AjoutClient
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 8355640397152215639L;

	private JPanel 				panelModification;
	
	private GridBagConstraints 	constraint;
	
	private JLabel 		labelModificationAdresse,
						labelModificationVille,
						labelModificationCodePostal,
						labelModificationTelephone,
						labelModificationPrenom,
						labelModificationNom,
						labelModificationGroupe,
						labelModificationCommentaire;
	
	private JValidTextField		textModificationAdresse,
							    textModificationPrenom,
							    textModificationNom,
							    textModificationCodePostal,
							    textModificationVille;
	
	private JValidScrollTextArea textAreaModificationCommentaire;
	
	private DefaultListModel<String> listModelTelephone;
	private JScrollList<String> listTelephone;
	private DefaultListModel<String> listModelGroupe;
	private JScrollList<String> listGroupe;
	
	private Language lang;
	
	private int client_id;
	private int ville_id;
	
	public ModifierClient(Language lang, Message messageDataChanged) throws Exception
	{
		super(lang,messageDataChanged);
		initVariable(lang);
		initComponents();
	}
	
	/**
	 * initialise tout les variable
	 */
	private void initVariable(Language lang)
	{
		this.lang = lang;
		client_id = 0;
		ville_id = 0;
		
		constraint = new GridBagConstraints();
		
		labelModificationAdresse = new JLabel(lang.getClientAdresse().replaceAll("%", "") + " : ");
		labelModificationVille = new JLabel(lang.getClientVille().replaceAll("%", "") + " : ");
		labelModificationCodePostal = new JLabel(lang.getClientCodePostal().replaceAll("%", "") + " : ");
		labelModificationTelephone = new JLabel(lang.getClientNumeroTelephone().replaceAll("%", "") + " : ");
		labelModificationPrenom = new JLabel(lang.getClientPrenom().replaceAll("%", "") + " : ");
		labelModificationNom = new JLabel(lang.getClientNom().replaceAll("%", "") + " : ");
		labelModificationGroupe = new JLabel(lang.getClientGroupe().replaceAll("%", "") + " : ");
		labelModificationCommentaire = new JLabel("");
		
		textModificationAdresse = JValidTextField.JValidTextFieldWithoutText(20);
		textModificationPrenom = JValidTextField.JValidTextFieldWithoutText(20);
		textModificationNom = JValidTextField.JValidTextFieldWithoutText(20);
		textModificationCodePostal = JValidTextField.JValidTextFieldWithoutText(20);
		textModificationVille = JValidTextField.JValidTextFieldWithoutText(20);
		
		textAreaModificationCommentaire = JValidScrollTextArea.JValidTextFieldWithoutText(6);
		
		textModificationAdresse.setEditable(false);
		textModificationPrenom.setEditable(false);
		textModificationNom.setEditable(false);
		textModificationCodePostal.setEditable(false);
		textModificationVille.setEditable(false);
		
		listModelTelephone = new DefaultListModel<String>();
		listTelephone     = new JScrollList<String>(listModelTelephone);
		listTelephone.setVisibleRowCount(3);
		listTelephone.setEnabled(false);
		
		listModelGroupe = new DefaultListModel<String>();
		listGroupe     = new JScrollList<String>(listModelGroupe);
		listGroupe.setVisibleRowCount(3);
		listGroupe.setEnabled(false);
		
		panelModification   = new JPanel(new GridBagLayout());
		
		setEnabled(false);
	}
	
	/**
	 * initialise tout les components
	 */
	private void initComponents()
	{
		//============Modification=============================
		constraint.anchor = GridBagConstraints.NORTH;
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.gridheight = 1;
		constraint.gridwidth = 4;
		constraint.weightx = 1;
		constraint.weighty = 0;
		constraint.gridx = 0;
		constraint.gridy = 0;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(new JSeparator(SwingConstants.HORIZONTAL), constraint);
		
		constraint.anchor = GridBagConstraints.NORTH;
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridheight = 1;
		constraint.gridwidth = 1;
		constraint.gridx = 0;
		constraint.gridy = 1;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(labelModificationPrenom, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx = 1;
		constraint.gridy = 1;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(textModificationPrenom, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx = 2;
		constraint.gridy = 1;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(labelModificationAdresse, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx = 3;
		constraint.gridy = 1;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(textModificationAdresse, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx = 0;
		constraint.gridy = 2;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(labelModificationNom, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx = 1;
		constraint.gridy = 2;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(textModificationNom, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 0;
		constraint.weighty = 1;
		constraint.gridx = 2;
		constraint.gridy = 2;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(labelModificationVille, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx = 3;
		constraint.gridy = 2;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(textModificationVille, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 0;
		constraint.weighty = 1;
		constraint.gridx = 0;
		constraint.gridy = 3;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(labelModificationGroupe, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx = 1;
		constraint.gridy = 3;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(listGroupe, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx = 2;
		constraint.gridy = 3;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(labelModificationCodePostal, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx = 3;
		constraint.gridy = 3;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(textModificationCodePostal, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 0;
		constraint.weighty = 1;
		constraint.gridx = 0;
		constraint.gridy = 4;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(labelModificationTelephone, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx = 1;
		constraint.gridy = 4;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(listTelephone, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridheight = 1;
		constraint.gridwidth = 2;
		constraint.gridx = 0;
		constraint.gridy = 5;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(labelModificationCommentaire, constraint);
		
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridheight = 1;
		constraint.gridwidth = 4;
		constraint.gridx = 0;
		constraint.gridy = 6;
		constraint.insets = new Insets(0, 5, 5, 5);
		panelModification.add(textAreaModificationCommentaire, constraint);

		//===========Ajout au panel principal==================
		constraint.anchor = GridBagConstraints.NORTH;
		constraint.fill = GridBagConstraints.HORIZONTAL;
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx = 0;
		constraint.gridy = 1;
		constraint.insets = new Insets(0, 0, 0, 0);
		add(panelModification, constraint);
	}
	
	private void setModificationListeGroupe(String[] element)
	{
		for(int i = 0;i<element.length;i++)
		{
			listModelGroupe.addElement(element[i]);
		}
		listGroupe.setModel(listModelGroupe);
	}
	
	private void setModificationListeTelephone(String[] element)
	{
		for(int i = 0;i<element.length;i++)
		{
			listModelTelephone.addElement(element[i]);
		}
		listTelephone.setModel(listModelTelephone);
	}
	
	public void addDataToFields(String Prenom, String Nom, String Adresse, String CodePostal, String Ville, String[] Groupe, String[] Telephone, String Commentaire)
	{
		super.addDataToFields(Prenom, Nom, Adresse, CodePostal, Ville, Groupe, Telephone, Commentaire);
		textModificationAdresse.setText(Adresse);
		textModificationPrenom.setText(Prenom);
		textModificationNom.setText(Nom);
		textModificationCodePostal.setText(CodePostal);
		labelModificationCommentaire.setText(lang.getClientCommentaire().replaceAll("%", "") + " : ");
		textAreaModificationCommentaire.setText(Commentaire);
		
		textModificationVille.setText(Ville);
		setModificationListeGroupe(Groupe);
		setModificationListeTelephone(Telephone);
	}
	
	public void clearInfo()
	{
		super.clearInfo();
		client_id=0;
		ville_id=0;
		
		textModificationAdresse.setText("");
		textModificationPrenom.setText("");
		textModificationNom.setText("");
		textModificationCodePostal.setText("");
		labelModificationCommentaire.setText("");
		
		listModelGroupe.removeAllElements();
		listGroupe.setModel(listModelGroupe);
		
		textModificationVille.setText("");
		
		listModelTelephone.removeAllElements();
		listTelephone.setModel(listModelTelephone);
	}	

	public int getClient_id() {
		return client_id;
	}

	public void setClient_id(int client_id) {
		this.client_id = client_id;
	}

	public int getVille_id() {
		return ville_id;
	}

	public void setVille_id(int ville_id) {
		this.ville_id = ville_id;
	}
	
	public void setVilleNom(String nom) {
		this.textModificationVille.setText(nom);
		super.setVilleNom(nom);
	}

	public static void main(String[] args) throws Exception {
		JFrame a = new JFrame("window");
		ModifierClient norme = new ModifierClient(Francais.getInstance(),null);
		//norme.getObservable().addObserver(new Controleur());
		a.add(norme);
		
		String[] groupe = {"Bob","asd1","asd2","asd3","asd4","asd5","asd6","asd7","asd8","asd9","asd10"},
				 telephone = {"819-829-3931"};
		
		norme.addDataToFields("Jonathan", "guertin","2697 rue des Iris", "J1R 0E4", "Sherbrooke", groupe, telephone, "Le client à déjà mangé un pirhana vivant");
		//norme.setTxtPrenom("asd");
		a.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		a.pack();
		a.setVisible(true);
	}
}
