package view.vuePaiement;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import tool.regEx.DataNormalizer;
import view.Vue;

public class VuePaiement  extends Vue implements ActionListener{

	private static final long serialVersionUID = -2501042459651857825L;

	private GridBagConstraints constraint;
	
	private JPanel panelPaiement;
	
	private JLabel  labelTitre
				   ,labelTotal
				   ,labelRestant
				   ,labelRecu;
	
	private JTextField textfieldTotal
					  ,textfieldRestant
					  ,textfieldRecu;
	
	private JButton  buttonConfirmer
					,buttonAnnuler;
	
	/**
	 * constructeur
	 */
	public VuePaiement(boolean True) {
		super(new GridBagLayout());
		initVariable();
		initComponents();
		initListener();
		setMnemonic();
	}
	
	/**
	 * initialise tout les variable
	 */
	private void initVariable(){
		constraint = new GridBagConstraints();
		
		labelTitre   = new JLabel("Paiement");
		labelTitre.setFont(labelTitre.getFont().deriveFont(25.0f));
		
		labelTotal   = new JLabel("Montant total:");
		labelRestant = new JLabel("Montant restant:");
		labelRecu    = new JLabel("Montant re�u:");
		
		textfieldTotal   = new JTextField(15);
		textfieldRestant = new JTextField(15);
		textfieldRecu    = new JTextField(15);
		
		buttonConfirmer = new JButton("Confirmer");
		buttonAnnuler   = new JButton("Annuler");
		
		panelPaiement   = new JPanel(new GridBagLayout());
	}
	
	/**
	 * initialise tout les components
	 */
	private void initComponents(){
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx   = 4;
		constraint.gridy   = 0;
		panelPaiement.add(labelTitre);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx   = 0;
		constraint.gridy   = 1;
		panelPaiement.add(labelTotal,constraint);
		
		constraint.fill    = GridBagConstraints.NONE;
		constraint.insets = new Insets(0, 5, 5, 5);		
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx   = 1;
		constraint.gridy   = 1;
		panelPaiement.add(textfieldTotal,constraint);

		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx   = 2;
		constraint.gridy   = 1;
		panelPaiement.add(labelRestant,constraint);

		constraint.fill    = GridBagConstraints.NONE;
		constraint.insets = new Insets(0, 5, 5, 5);		
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx   = 3;
		constraint.gridy   = 1;
		panelPaiement.add(textfieldRestant,constraint);

		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx   = 0;
		constraint.gridy   = 2;
		panelPaiement.add(labelRecu,constraint);

		constraint.fill    = GridBagConstraints.NONE;
		constraint.insets = new Insets(0, 5, 5, 5);		
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx   = 1;
		constraint.gridy   = 2;
		panelPaiement.add(textfieldRecu,constraint);

		//Buttons
		constraint.fill    = GridBagConstraints.NONE;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx   = 1;
		constraint.gridy   = 3;
		panelPaiement.add(buttonConfirmer,constraint);

		constraint.fill    = GridBagConstraints.NONE;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx   = 2;
		constraint.gridy   = 3;
		panelPaiement.add(buttonAnnuler,constraint);

		//GridBag
		constraint.fill    = GridBagConstraints.NONE;
		constraint.insets = new Insets(0, 0, 0, 0);
		constraint.weightx = 1;
		constraint.weighty = 1;
		constraint.gridx   = 0;
		constraint.gridy   = 0;
		panelPaiement.setMinimumSize(new Dimension(600, 300));
		panelPaiement.setPreferredSize(new Dimension(600, 300));
		add(panelPaiement,constraint);		
	}
	
	private void initListener(){
		buttonConfirmer.addActionListener(this);
		buttonAnnuler.addActionListener(this);
	}

	private void setMnemonic(){
		labelTotal.setDisplayedMnemonic('T');
		labelTotal.setLabelFor(textfieldTotal);
		
		labelRestant.setDisplayedMnemonic('E');
		labelRestant.setLabelFor(textfieldRestant);
		
		labelRecu.setDisplayedMnemonic('R');
		labelRecu.setLabelFor(textfieldRecu);
	
		buttonConfirmer.setMnemonic('C');
		buttonAnnuler.setMnemonic('A');
	}
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		this.getObservable().notifyObservers(this);
	}

	/* getter */
	
	/**
	 * @return text
	 */
	public String getTextFieldTotal(){
		return DataNormalizer.normalize(textfieldTotal.getText());
	}
	
	/**
	 * 
	 * @return
	 */
	public String getTextFieldRestant(){
		return DataNormalizer.normalize(textfieldRestant.getText());
	}
	
	/**
	 * 
	 * @return
	 */
	public String getTextFieldRecu(){
		return DataNormalizer.normalize(textfieldRecu.getText());
	}

	/* setter */
	/**
	 * @param text
	 */
	public void setTextFieldRestant(String text){
		textfieldRestant.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * @param text
	 */
	public void setTextFieldRecu(String text){
		textfieldRecu.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * @param text
	 */
	public void setTextFieldTotal(String text){
		textfieldTotal.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		JFrame a = new JFrame("window");
		VuePaiement norme = new VuePaiement(true);
		//norme.getObservable().addObserver(new Controleur());
		a.add(norme);
		a.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		a.pack();
		a.setVisible(true);
	}
}
