/**
 * 
 */
package view.vueGestionTaxe;

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.JSeparator;

import language.Francais;
import language.Language;
import tool.regEx.DataNormalizer;
import view.Formulaire;
import view.tool.inputField.JValidTextField;
import view.tool.moneyField.JMoneyField;
import view.tool.percentageField.JPercentField;

/**
 * Interface graphique destin� � la gestion des taxes
 * @author Alfredo Toyo
 *
 */
public class VueGestionTaxe extends Formulaire{
	private static final long serialVersionUID = -1477438464144085384L;

	private JPanel panelGestionTaxe
	              ,panelManageFields
	              ,panelInfoGestionTaxe
	              ,panelInfoManageFields;
	
	private JSeparator separator;
	
	private GridBagConstraints constraint;
	
	private Language langue;
	
	private JLabel labelTPS
   				  ,labelTVQ
   				  ,labelTaxeHebergement
   				  ,labelInfoTPS
   				  ,labelInfoTVQ
   				  ,labelInfoTaxeHebergement;
	
	private JPercentField textFieldTPS
	  				     ,textFieldTVQ
	  				     ,textFieldInfoTPS
	  				     ,textFieldInfoTVQ;
	
	private JValidTextField textFieldTaxeHebergement
	  				  	   ,textFieldInfoTaxeHebergement;

	/**
	 * Constructeur
	 * @param langue
	 */
	public VueGestionTaxe(Language langue){
		super();
		this.langue = langue;
		initVariable();
		initComponents();
		setMnemonic();
	}
	
	/**
	 * Initialisation des attributs de la classe
	 */
	private void initVariable()
	{
		panelGestionTaxe      = new JPanel(new GridBagLayout());
		panelManageFields     = new JPanel(new GridBagLayout());
		panelInfoGestionTaxe  = new JPanel(new GridBagLayout());
		panelInfoManageFields = new JPanel(new GridBagLayout());
		
		separator = new JSeparator();
		
		constraint = new GridBagConstraints();
		
		labelTPS                 = new JLabel(langue.getGestionTaxes_TPS().replaceAll("%", ""));
		labelTVQ		         = new JLabel(langue.getGestionTaxes_TVQ().replaceAll("%", ""));
		labelTaxeHebergement     = new JLabel(langue.getGestionTaxes_Hebergement().replaceAll("%", ""));
		labelInfoTPS             = new JLabel(langue.getGestionTaxes_TPS().replaceAll("%", ""));
		labelInfoTVQ		     = new JLabel(langue.getGestionTaxes_TVQ().replaceAll("%", ""));
		labelInfoTaxeHebergement = new JLabel(langue.getGestionTaxes_Hebergement().replaceAll("%", ""));
		
		textFieldTPS     	         = new JPercentField(6);
		textFieldTVQ     	         = new JPercentField(6);
		textFieldTaxeHebergement     = new JMoneyField(6);
		textFieldInfoTPS     	     = new JPercentField(6);
		textFieldInfoTVQ     	     = new JPercentField(6);
		textFieldInfoTaxeHebergement = new JMoneyField(6);
	}
	
	/**
	 * Initialisation des composants du formulaire
	 */
	private void initComponents(){
		/******************CHAMPS EDITABLES****************************/
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 0.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 0;
		panelManageFields.add(labelTPS,constraint);
		
		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 0.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 1;
		constraint.gridy   = 0;
		panelManageFields.add(textFieldTPS,constraint);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 0.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 1;
		panelManageFields.add(labelTVQ,constraint);
		
		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 1;
		constraint.gridy   = 1;
		panelManageFields.add(textFieldTVQ,constraint);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 0.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 2;
		panelManageFields.add(labelTaxeHebergement,constraint);
		
		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 1;
		constraint.gridy   = 2;
		panelManageFields.add(textFieldTaxeHebergement,constraint);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 0;
		add(panelGestionTaxe,constraint);

		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 0;
		panelGestionTaxe.add(panelManageFields,constraint);
		/******************FIN CHAMPS EDITABLES**************************/
		
		/******************CHAMPS NON EDITABLES**************************/
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 0;
		constraint.gridwidth = 5;
		panelInfoGestionTaxe.add(separator,constraint);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 0.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 0;
		constraint.gridwidth = 1;
		panelInfoManageFields.add(labelInfoTPS,constraint);
		
		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 0.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 1;
		constraint.gridy   = 0;
		panelInfoManageFields.add(textFieldInfoTPS,constraint);
		textFieldInfoTPS.setEditable(false);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 0.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 1;
		panelInfoManageFields.add(labelInfoTVQ,constraint);
		
		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 1;
		constraint.gridy   = 1;
		panelInfoManageFields.add(textFieldInfoTVQ,constraint);
		textFieldInfoTVQ.setEditable(false);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 0.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 2;
		panelInfoManageFields.add(labelInfoTaxeHebergement,constraint);
		
		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 1;
		constraint.gridy   = 2;
		panelInfoManageFields.add(textFieldInfoTaxeHebergement,constraint);
		textFieldInfoTaxeHebergement.setEditable(false);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 2;
		add(panelInfoGestionTaxe,constraint);

		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets  = new Insets(10, 3, 10, 3);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 1;
		panelInfoGestionTaxe.add(panelInfoManageFields,constraint);
		/******************FIN CHAMPS NON EDITABLES**********************/
	}
	
	/**
	 * Initialisation des mn�moniques
	 */	
	private void setMnemonic(){
		labelTPS.setDisplayedMnemonic(langue.getGestionTaxes_TPS().charAt(langue.getGestionTaxes_TPS().indexOf("%")+1));
		labelTPS.setLabelFor(textFieldTPS);
		
		labelTVQ.setDisplayedMnemonic(langue.getGestionTaxes_TVQ().charAt(langue.getGestionTaxes_TVQ().indexOf("%")+1));
		labelTVQ.setLabelFor(textFieldTVQ);
		
		labelTaxeHebergement.setDisplayedMnemonic(langue.getGestionTaxes_Hebergement().charAt(langue.getGestionTaxes_Hebergement().indexOf("%")+1));
		labelTaxeHebergement.setLabelFor(textFieldTaxeHebergement);
	}
	
    /* getter */	
	/**
	 * Retourne la valeur du champ TPS
	 * @return text
	 */
	public String getTextFieldTPS(){
		String tps = DataNormalizer.normalize(textFieldTPS.getText());
		return tps.substring(0, tps.indexOf("%"));
	}
	
	/**
	 * Validation de champ
	 * @return boolean
	 */
	public boolean getTextFieldTPSIsValid(){
		return textFieldTPS.isValid();
	}
	
	/**
	 * Retourne la valeur du champ TVQ
	 * @return text
	 */
	public String getTextFieldTVQ(){
		String tvq = DataNormalizer.normalize(textFieldTVQ.getText());
		return tvq.substring(0, tvq.indexOf("%"));
	}
	
	/**
	 * Validation de champ
	 * @return boolean
	 */
	public boolean getTextFieldTVQIsValid(){
		return textFieldTVQ.isValid();
	}

	/**
	 * Retourne la valeur du champ h�bergement
	 * @return text
	 */
	public String getTextFieldHebergement(){
		String hebergement = DataNormalizer.normalize(textFieldTaxeHebergement.getText());
		return hebergement.substring(0, hebergement.indexOf("$"));
	}
	
	/**
	 * Validation de champ
	 * @return boolean
	 */
	public boolean getTextFieldHebergementIsValid(){
		return textFieldTaxeHebergement.isValid();
	}

	/* setter */
	/**
	 * Affectation d'une valeur pour le champ TPS
	 * @param text
	 */
	public void setTextFieldTPS(String text){
		textFieldTPS.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * Affectation d'une valeur pour le champ TVQ
	 * @param text
	 */
	public void setTextFieldTVQ(String text){
		textFieldTVQ.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * Affectation d'une valeur pour le champ h�bergement
	 * @param text
	 */
	public void setTextFieldHebergement(String text){
		textFieldTaxeHebergement.setText(DataNormalizer.normalize(text));
	}
	
	/* setters on read only fields*/
	/**
	 * Affectation d'une valeur pour le champ TPS
	 * @param text
	 */
	public void setTextFieldInfoTPS(String text){
		textFieldInfoTPS.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * Affectation d'une valeur pour le champ TVQ
	 * @param text
	 */
	public void setTextFieldInfoTVQ(String text){
		textFieldInfoTVQ.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * Affectation d'une valeur pour le champ h�bergement
	 * @param text
	 */
	public void setTextFieldInfoHebergement(String text){
		textFieldInfoTaxeHebergement.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * Ajout des donn�es dans les champ en lecture seule
	 * @param tps
	 * @param tvq
	 * @param hebergement
	 */
	public void AddDataToFields(String tps, String tvq, String hebergement){
		setTextFieldTPS(tps);
		setTextFieldInfoTPS(tps);
		setTextFieldTVQ(tvq);
		setTextFieldInfoTVQ(tvq);
		setTextFieldHebergement(hebergement);
		setTextFieldInfoHebergement(hebergement);
	}
	
	/**
	 * �fface les informations de l'article en lecture seule
	 */
	public void ClearInfo(){
		textFieldTPS.setText("");
		textFieldTVQ.setText("");
		textFieldInfoTPS.setText("");
		textFieldInfoTVQ.setText("");
		textFieldTaxeHebergement.setText("");
		textFieldInfoTaxeHebergement.setText("");
	}

	/**
	 * Le code du main est pour les fins de test d'affichage et ils peuvent �tre modifi�s o� effac�s
	 * @param args
	 */
	public static void main(String[] args) {
		JFrame a = new JFrame("window");
		VueGestionTaxe fer = new VueGestionTaxe(Francais.getInstance());
		fer.AddDataToFields("", "", "");
		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);
	}
}
