﻿package view.vueRechercheClient;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import language.Francais;
import language.Language;
import tool.regEx.DataNormalizer;
import view.Formulaire;
import view.tool.inputField.JValidTextField;
import view.tool.jEasyTable.JEasyScrollTable;

/**
 * Interface graphique destiné à la recherche des clients
* @author Alfredo Toyo
*
*/
public class VueRechercheClient  extends Formulaire{	
	private static final long serialVersionUID = 8080433453868575774L;
	
	private GridBagConstraints constraint;
	
	private Language langue;
	
	private JPanel panelSearchFields;
	private JScrollPane panelScrollSearch;
	
	private JLabel labelNom
	   				   ,labelPrenom
	   				   ,labelTelephone
	   				   ,labelAdresse
	   				   ,labelVille
	   				   ,labelProvince
	   				   ,labelPays;

	private JValidTextField textFieldNom
					  	   ,textFieldPrenom
					  	   ,textFieldTelephone
					       ,textFieldAdresse
					       ,textFieldVille
					       ,textFieldProvince
					       ,textFieldPays;
	
	private JEasyScrollTable table;

	private static final String NumericRegex = "[0-9 \\(\\)-]";

	private int client_id;
	
	/**
	 * Constructeur
	 * @param langue
	 * @throws Exception 
	 */
	public VueRechercheClient(Language langue) throws Exception{
		super();
		this.langue = langue;
		initVariable();
		initComponents();
		setMnemonic();
	}
	
	/**
	 * Initialisation des attributs de la classe
	 * @throws Exception 
	 */
	private void initVariable() throws Exception{
		client_id=0;
		panelSearchFields    = new JPanel(new FlowLayout(FlowLayout.LEFT));
		panelScrollSearch     = new JScrollPane();
		
		constraint = new GridBagConstraints();
		table = new JEasyScrollTable(langue.getRechercheClientColonne());
		table.setSelectable(JEasyScrollTable.SINGLE_SELECTION);
		
		labelNom       = new JLabel(langue.getRechercheClient_Nom().replaceAll("%", ""));
		labelPrenom    = new JLabel(langue.getRechercheClient_Prenom().replaceAll("%", ""));
		labelTelephone = new JLabel(langue.getRechercheClient_Telephone().replaceAll("%", ""));
		labelAdresse   = new JLabel(langue.getRechercheClient_Adresse().replaceAll("%", ""));
		labelVille     = new JLabel(langue.getRechercheClient_Ville().replace("%", ""));
		labelProvince  = new JLabel(langue.getRechercheClient_Province().replace("%", ""));
		labelPays      = new JLabel(langue.getRechercheClient_Pays().replace("%", ""));
		
		textFieldNom       = JValidTextField.JValidTextFieldWithoutText(16);
		textFieldPrenom    = JValidTextField.JValidTextFieldWithoutText(16);
		textFieldTelephone = JValidTextField.JValidTextFieldAllowCertainCharacter(NumericRegex, 12);
		textFieldAdresse   = JValidTextField.JValidTextFieldWithoutText(32);
		textFieldVille 	   = JValidTextField.JValidTextFieldWithoutText(16);
	    textFieldProvince  = JValidTextField.JValidTextFieldWithoutText(16);
	    textFieldPays	   = JValidTextField.JValidTextFieldWithoutText(16);
	}
	
	/**
	 * Initialisation des composants du formulaire
	 */
	private void initComponents(){
		panelScrollSearch.setViewportView(panelSearchFields);
		panelScrollSearch.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		panelScrollSearch.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
		panelScrollSearch.setPreferredSize(new Dimension (1, 50));
		panelScrollSearch.setSize(new Dimension (1, 50));
		panelScrollSearch.setMinimumSize(new Dimension (1, 50));
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.insets  = new Insets(5, 3, 5, 3);
		constraint.weightx = 1.0;
		constraint.weighty = 0.0;
		constraint.gridx   = 0;
		constraint.gridy   = 0;
		add(panelScrollSearch,constraint);
		
		panelSearchFields.add(labelNom);
		panelSearchFields.add(textFieldNom);
		panelSearchFields.add(labelPrenom);
		panelSearchFields.add(textFieldPrenom);
		panelSearchFields.add(labelTelephone);
		panelSearchFields.add(textFieldTelephone);
		panelSearchFields.add(labelAdresse);
		panelSearchFields.add(textFieldAdresse);
		panelSearchFields.add(labelVille);
		panelSearchFields.add(textFieldVille);
		panelSearchFields.add(labelProvince);
		panelSearchFields.add(textFieldProvince);
		panelSearchFields.add(labelPays);
		panelSearchFields.add(textFieldPays);

		constraint.fill    = GridBagConstraints.BOTH;
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 1;
		add(table,constraint);
	}
	
	/**
	 * Initialisation des mnémoniques
	 */
	private void setMnemonic(){
		labelNom.setDisplayedMnemonic(langue.getRechercheClient_Nom().charAt(langue.getRechercheClient_Nom().indexOf("%")+1));
		labelNom.setLabelFor(textFieldNom);
		labelPrenom.setDisplayedMnemonic(langue.getRechercheClient_Prenom().charAt(langue.getRechercheClient_Prenom().indexOf("%")+1));
		labelPrenom.setLabelFor(textFieldPrenom);
		labelTelephone.setDisplayedMnemonic(langue.getRechercheClient_Telephone().charAt(langue.getRechercheClient_Telephone().indexOf("%")+1));
		labelTelephone.setLabelFor(textFieldTelephone);
		labelAdresse.setDisplayedMnemonic(langue.getRechercheClient_Adresse().charAt(langue.getRechercheClient_Adresse().indexOf("%")+1));
		labelAdresse.setLabelFor(textFieldAdresse);		
		labelVille.setDisplayedMnemonic(langue.getRechercheClient_Ville().charAt(langue.getRechercheClient_Ville().indexOf("%")+1));
		labelVille.setLabelFor(textFieldVille);		
		labelProvince.setDisplayedMnemonic(langue.getRechercheClient_Province().charAt(langue.getRechercheClient_Province().indexOf("%")+1));
		labelProvince.setLabelFor(textFieldProvince);		
		labelPays.setDisplayedMnemonic(langue.getRechercheClient_Pays().charAt(langue.getRechercheClient_Pays().indexOf("%")+1));
		labelPays.setLabelFor(textFieldPays);		
	}
	
	public void addLineToTableClient(int numero, 
			                          String nom, 
			                          String prenom, 
			                          String adresse,
			                          String codePostal,
			                          String ville,
			                          String province,
			                          String telephone){
		try {
			table.addRow(new JLabel[]{new JLabel(""+numero), 
					                  new JLabel(nom),
					                  new JLabel(prenom),
					                  new JLabel(adresse),
					                  new JLabel(codePostal),
					                  new JLabel(ville),
					                  new JLabel(province),
					                  new JLabel(telephone)});
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("JEasyTable.addRow mal utilisé");
		}
	}
	
	public int getSelectedClient(){
		return Integer.valueOf(((JLabel)table.getSelectedRow()[0][0]).getText());
	}
	
	/**
	 * Vider la table
	 */
	public void clearClient(){
		table.clear();
	}
	
    /* getter */	
	/**
	 * Retourne la valeur du champ nom
	 * @return text
	 */
	public String getTextFieldNom(){
		return DataNormalizer.normalize(textFieldNom.getText());
	}
	
	/**
	 * Retourne la valeur du champ prénom
	 * @return text
	 */
	public String getTextFieldPrenom(){
		return DataNormalizer.normalize(textFieldPrenom.getText());
	}
	
	/**
	 * Retourne la valeur du champ téléphone
	 * @return text
	 */
	public String getTextFieldTelephone(){
		return DataNormalizer.normalize(textFieldTelephone.getText());
	}
	
	/**
	 * Retourne la valeur du champ adresse
	 * @return text
	 */
	public String getTextFieldAdresse() {
		return DataNormalizer.normalize(textFieldAdresse.getText());
	}
	
	/**
	 * returne la valeur du champ ville
	 * @return text
	 */
	public String getTextFieldVille(){
		return textFieldVille.getText();
	}

	/**
	 * returne la valeur du champ Province
	 * @return text
	 */
	public String getTextFieldProvince(){
		return textFieldProvince.getText();
	}
	
	/**
	 * returne la valeur du champ Pays
	 * @return text
	 */
	public String getTextFieldPays(){
		return textFieldPays.getText();
	}
	
	/* setter */	
	/**
	 * Affectation d'une valeur pour le champ nom
	 * @param text
	 */
	public void setTextFieldNom(String text){
		textFieldNom.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * Affectation d'une valeur pour le champ prénom
	 * @param text
	 */
	public void setTextFieldPrenom(String text){
		textFieldPrenom.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * Affectation d'une valeur pour le champ téléphone
	 * @param text
	 */
	public void setTextFieldTelephone(String text){
		textFieldTelephone.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * Affectation d'une valeur pour le champ adresse
	 * @param text
	 */
	public void setTextFieldAdresse(String text){
		textFieldAdresse.setText(DataNormalizer.normalize(text));
	}

	public void setClientId(int id){
		client_id=id;
	}
	
	public int getClientId(){
		return client_id;
	}
	
	public boolean hasRowSelected()
	{
		return table.hasRowSelected();
	}
	
	/**
	 * Le code du main est pour les fins de test d'affichage et ils peuvent être modifiés où effacés
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		JFrame a = new JFrame("window");
		
		VueRechercheClient fer = new VueRechercheClient(Francais.getInstance());
		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;
		
		a.add(fer,contraint);
		a.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		a.pack();
		a.setVisible(true);
	}
}
