/**
 * 
 */
package view.vueRechercheReservation;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.sql.Date;
import java.util.Calendar;

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.dateField.DateField;
import view.tool.inputField.JValidTextField;
import view.tool.jEasyTable.JEasyScrollTable;

/**
 * Interface graphique destinee la recherche des reservations
 * @author Alfredo Toyo
 *
 */
public class VueRechercheReservation extends Formulaire {
	private static final long serialVersionUID = 2003523572709188393L;
	
	private GridBagConstraints constraint;
	
	private Language langue;
	
	private JPanel panelSearchFields;
	private JScrollPane panelScrollSearch;
	
	private JLabel labelDateArrivee
    			  	   ,labelDateDepart
    			  	   ,labelNomClient
    			  	   ,labelPrenomClient
    			  	   ,labelNomGroupe;
	
	private JValidTextField textFieldNomClient
	  				  	   ,textFieldPrenomClient
	  				  	   ,textFieldNomGroupe;
	
	private DateField dateFieldDateArrivee
					 ,dateFieldDateDepart;
	
	private JEasyScrollTable table;
	
	/**
	 * Constructeur
	 * @param langue
	 * @throws Exception
	 */
	public VueRechercheReservation(Language langue) throws Exception{
		super();
		this.langue = langue;
		initVariable();
		initComponents();
		setMnemonic();
	}
	
	/**
	 * Initialisation des attributs de la classe
	 * @throws Exception 
	 */
	private void initVariable() throws Exception{
		constraint = new GridBagConstraints();

		panelSearchFields         = new JPanel(new FlowLayout(FlowLayout.LEFT));
		panelScrollSearch     = new JScrollPane();

		labelDateArrivee  = new JLabel(langue.getRechercheReservation_DateArrivee().replaceAll("%", ""));
		labelDateDepart   = new JLabel(langue.getRechercheReservation_DateDepart().replaceAll("%", ""));
		labelNomClient    = new JLabel(langue.getRechercheReservation_NomClient().replaceAll("%", ""));
		labelPrenomClient = new JLabel(langue.getRechercheReservation_PrenomClient().replaceAll("%", ""));
		labelNomGroupe    = new JLabel(langue.getRechercheReservation_NomGroupe().replaceAll("%", ""));

		dateFieldDateArrivee = DateField.fromCalendar(Calendar.getInstance());
		dateFieldDateDepart  = DateField.fromCalendar(Calendar.getInstance());

		textFieldNomClient 	  = JValidTextField.JValidTextFieldWithoutText(16);
		textFieldPrenomClient = JValidTextField.JValidTextFieldWithoutText(16);
		textFieldNomGroupe    = JValidTextField.JValidTextFieldWithoutText(16);

		table = new JEasyScrollTable(langue.getRechercheReservationColonne());
		table.setSelectable(1);
	}

	/**
	 * 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(labelDateArrivee);
		panelSearchFields.add(dateFieldDateArrivee);
		panelSearchFields.add(labelDateDepart);
		panelSearchFields.add(dateFieldDateDepart);
		panelSearchFields.add(labelNomClient);
		panelSearchFields.add(textFieldNomClient);
		panelSearchFields.add(labelPrenomClient);
		panelSearchFields.add(textFieldPrenomClient);
		panelSearchFields.add(labelNomGroupe);
		panelSearchFields.add(textFieldNomGroupe);
		
		constraint.fill    = GridBagConstraints.BOTH;
		constraint.anchor  = GridBagConstraints.NORTH;
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 1;
		add(table,constraint);
	}
	
	/**
	 * Initialisation des mn�moniques
	 */
	private void setMnemonic(){
		labelDateArrivee.setDisplayedMnemonic(langue.getRechercheReservation_DateArrivee().charAt(langue.getRechercheReservation_DateArrivee().indexOf("%")+1));
		labelDateArrivee.setLabelFor(dateFieldDateArrivee);
		
		labelDateDepart.setDisplayedMnemonic(langue.getRechercheReservation_DateDepart().charAt(langue.getRechercheReservation_DateDepart().indexOf("%")+1));
		labelDateDepart.setLabelFor(dateFieldDateDepart);
		
		labelNomClient.setDisplayedMnemonic(langue.getRechercheReservation_NomClient().charAt(langue.getRechercheReservation_NomClient().indexOf("%")+1));
		labelNomClient.setLabelFor(textFieldNomClient);
		
		labelPrenomClient.setDisplayedMnemonic(langue.getRechercheReservation_PrenomClient().charAt(langue.getRechercheReservation_PrenomClient().indexOf("%")+1));
		labelPrenomClient.setLabelFor(textFieldPrenomClient);
		
		labelNomGroupe.setDisplayedMnemonic(langue.getRechercheReservation_NomGroupe().charAt(langue.getRechercheReservation_NomGroupe().indexOf("%")+1));
		labelNomGroupe.setLabelFor(textFieldNomGroupe);
	}
	
	public void addLineToTableReservation(int numeroFacture,
										  Date arrivee,
										  Date depart, 
										  String nom,
										  String prenom,
										  String groupe,
										  int chambre,
										  String status,
										  String commentaire){
		try {
		table.addRow(new JLabel[]{new JLabel(""+numeroFacture),
				                  new JLabel(arrivee.toString()),
								  new JLabel(depart.toString()),
								  new JLabel(nom),
								  new JLabel(prenom),
								  new JLabel(groupe),
								  new JLabel(""+chambre),
								  new JLabel(status),
								  new JLabel(commentaire)});
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("JEasyTable.addRow mal utilise");
		}
	}

	
	public int getSelectedNumeroFacture(){
		System.out.println(((JLabel)table.getSelectedRow()[0][0]).getText());
		return Integer.valueOf(((JLabel)table.getSelectedRow()[0][0]).getText());
	}
	
	/**
	* Vider la table
	*/
	public void clearReservation(){
		table.clear();
	}
	
	/*Getter*/
	/**
	 * Retourne la valeur du champ
	 * @return text
	 */
	public String getDateFieldDateArrivee(){
		return dateFieldDateArrivee.getDate().toString();
	}
	
	/**
	 * Retourne la valeur du champ
	 * @return text
	 */
	public String getDateFieldDateDepart(){
		return dateFieldDateDepart.getDate().toString();
	}

	/**
	 * Retourne la valeur du champ 
	 * @return text
	 */
	public String getTextFieldNomClient(){
		return DataNormalizer.normalize(textFieldNomClient.getText());
	}
	
	/**
	 * Retourne la valeur du champ 
	 * @return text
	 */
	public String getTextFieldPrenomClient(){
		return DataNormalizer.normalize(textFieldPrenomClient.getText());
	}
	
	/**
	 * Retourne la valeur du champ 
	 * @return text
	 */
	public String getTextFieldNomGroupe(){
		return DataNormalizer.normalize(textFieldNomGroupe.getText());
	}
	
	/*Setter*/
	/**
	 * Affectation d'une valeur pour le champ 
	 * @param text
	 */
	public void setTextFieldNomClient(String text){
		textFieldNomClient.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * Affectation d'une valeur pour le champ 
	 * @param text
	 */
	public void setTextFieldPrenomClient(String text){
		textFieldPrenomClient.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * Affectation d'une valeur pour le champ 
	 * @param text
	 */
	public void setTextFieldNomGroupe(String text){
		textFieldNomGroupe.setText(DataNormalizer.normalize(text));
	}

	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");

		VueRechercheReservation fer = new VueRechercheReservation(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);
	}
}
