package view.vueGestionArticle;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.List;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;

import controler.Message;

import language.Francais;
import language.Language;
import tool.regEx.DataNormalizer;
import view.tool.inputField.JValidTextField;
import database.dataset.Categorie_article;

/**
 * Interface destin�e � la gestion d'articles
 * @author Alfredo Toyo
 *
 */
public class VueGestionModifierArticle extends VueGestionAjouterArticle{
	private static final long serialVersionUID = -1863019945672776476L;
	
	private JPanel panelInfoGestionArticle;
	
	private JSeparator separator;

	private GridBagConstraints constraint;
	
	private Language langue;
	
	private JLabel labelInfoCategorie
			  	  ,labelInfoCode
			  	  ,labelInfoDescription
			  	  ,labelInfoTaxable
			  	  ,labelInfoActif;
	
	private JValidTextField textFieldInfoCode
						   ,textFieldInfoDescription
						   ,textFieldInfoCategorie;
	
	private JCheckBox chkBoxInfoTaxable
					 ,chkBoxInfoActif;
	
	private int article_Modification_ID;
	
	private static final String AlphaNumericRegex = "[a-zA-Z0-9 -]";
	
	/**
	 * Constructeur
	 * @param langue
	 */
	public VueGestionModifierArticle(Language langue, Message messageDataChanged) {
		super(langue,messageDataChanged);
		this.langue = langue;
		initVariable();
		initComponents();
	}

	/**
	 * Initialisation des attributs de la classe
	 */
	private void initVariable()
	{
		panelInfoGestionArticle = new JPanel(new GridBagLayout());
		
		separator = new JSeparator();
		
		constraint = new GridBagConstraints();

	  	labelInfoCategorie   = new JLabel(langue.getGestionArticle_Categorie().replaceAll("%", ""));
	  	labelInfoCode        = new JLabel(langue.getGestionArticle_Code().replaceAll("%", ""));
	  	labelInfoDescription = new JLabel(langue.getGestionArticle_Description().replaceAll("%", ""));
	  	labelInfoTaxable     = new JLabel(langue.getGestionArticle_Taxable().replaceAll("%", ""));
	  	labelInfoActif       = new JLabel(langue.getGestionArticle_Actif().replaceAll("%", ""));

		textFieldInfoCode        = JValidTextField.JValidTextFieldAllowCertainCharacter(AlphaNumericRegex, 10);
		textFieldInfoDescription = JValidTextField.JValidTextFieldAllowCertainCharacter(AlphaNumericRegex, 16);
		textFieldInfoCategorie   = JValidTextField.JValidTextFieldAllowCertainCharacter(AlphaNumericRegex, 16);
		chkBoxInfoTaxable = new JCheckBox();
		chkBoxInfoActif   = new JCheckBox();
		
		article_Modification_ID = 0;
		
		setEnabled(false);
	}

	/**
	 * Initialisation des composants du formulaire
	 */
	private void initComponents(){
		/******************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;
		panelInfoGestionArticle.add(separator,constraint);
		
		constraint.fill      = GridBagConstraints.HORIZONTAL;
		constraint.anchor    = GridBagConstraints.NORTH;
		constraint.insets    = new Insets(10, 3, 10, 3);
		constraint.weightx   = 0.0;
		constraint.weighty   = 1.0;
		constraint.gridx     = 0;
		constraint.gridy     = 1;
		constraint.gridwidth = 1;
		panelInfoGestionArticle.add(labelInfoCategorie,constraint);
		
		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 1;
		constraint.gridy   = 1;
		panelInfoGestionArticle.add(textFieldInfoCategorie,constraint);
		textFieldInfoCategorie.setEditable(false);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.anchor  = GridBagConstraints.NORTH;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 0.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 3;
		panelInfoGestionArticle.add(labelInfoCode,constraint);
		
		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 1;
		constraint.gridy   = 3;
		panelInfoGestionArticle.add(textFieldInfoCode,constraint);
		textFieldInfoCode.setEditable(false);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.anchor  = GridBagConstraints.NORTH;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 0.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 4;
		panelInfoGestionArticle.add(labelInfoDescription,constraint);
		
		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 1;
		constraint.gridy   = 4;
		panelInfoGestionArticle.add(textFieldInfoDescription,constraint);
		textFieldInfoDescription.setEditable(false);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.anchor  = GridBagConstraints.NORTH;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 0.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 5;
		panelInfoGestionArticle.add(labelInfoTaxable,constraint);
		
		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 1;
		constraint.gridy   = 5;
		panelInfoGestionArticle.add(chkBoxInfoTaxable,constraint);
		chkBoxInfoTaxable.setEnabled(false);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.anchor  = GridBagConstraints.NORTH;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 0.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 6;
		panelInfoGestionArticle.add(labelInfoActif,constraint);
		
		constraint.fill    = GridBagConstraints.NONE;
		constraint.anchor  = GridBagConstraints.NORTHWEST;
		constraint.insets = new Insets(0, 5, 5, 5);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 1;
		constraint.gridy   = 6;
		panelInfoGestionArticle.add(chkBoxInfoActif,constraint);
		chkBoxInfoActif.setEnabled(false);
		
		constraint.fill    = GridBagConstraints.HORIZONTAL;
		constraint.insets = new Insets(0, 0, 0, 0);
		constraint.weightx = 1.0;
		constraint.weighty = 1.0;
		constraint.gridx   = 0;
		constraint.gridy   = 1;
		add(panelInfoGestionArticle,constraint);
		/******************FIN CHAMPS NON EDITABLES**********************/
	}
	
	public int getArticle_Modification_ID() {
		return article_Modification_ID;
	}

	public void setArticle_Modification_ID(int article_Modification_ID) {
		this.article_Modification_ID = article_Modification_ID;
	}
	
	/* setters on read only fields */
	/**
	 * Affectation d'une valeur texte au champ categorie
	 * Champ en lecture seule
	 * @param text
	 */
	public void setTextFieldInfoCategorie(String text){
		textFieldInfoCategorie.setText(text);
	}
	
	/**
	 * Affectation d'une valeur texte au champ code
	 * Champ en lecture seule
	 * @param text
	 */
	public void setTextFieldInfoCode(String text){
		textFieldInfoCode.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * Affectation d'une valeur texte au champ description
	 * Champ en lecture seule
	 * @param text
	 */
	public void setTextFieldInfoDescription(String text){
		textFieldInfoDescription.setText(DataNormalizer.normalize(text));
	}
	
	/**
	 * Affectation d'une valeur boolenne au champ taxable
	 * Champ en lecture seule
	 * @param selected
	 */
	public void setChkBoxInfoTaxable(boolean selected) {
		this.chkBoxInfoTaxable.setSelected(selected);
	}

	/**
	 * Affectation d'une valeur boolenne au champ actif
	 * Champ en lecture seule
	 * @param selected
	 */
	public void setChkBoxInfoActif(boolean selected) {
		this.chkBoxInfoActif.setSelected(selected);
	}
	
	/**
	 * Ajout des donn�es dans les champ en lecture seule
	 * @param categorie
	 * @param code
	 * @param description
	 * @param taxable
	 * @param actif
	 */
	public void AddDataToFields(List<Categorie_article> categories, String categorie, String code, String description, Boolean taxable, Boolean actif){
		super.AddDataToFields(categories, categorie, code, description, taxable, actif);
		setTextFieldInfoCategorie(categorie);
		setTextFieldInfoCode(code);
		setTextFieldInfoDescription(description);
		setChkBoxInfoTaxable(taxable);
		setChkBoxInfoActif(actif);
	}
	
	/**
	 * �fface les informations de l'article en lecture seule
	 */
	public void ClearInfo(){
		super.ClearInfo();
		setTextFieldInfoCategorie("");
		setTextFieldInfoCode("");
		setTextFieldInfoDescription("");
		setChkBoxInfoTaxable(false);
		setChkBoxInfoActif(false);
		article_Modification_ID = 0;
	}

	/**
	 * Le code du main est pour les fins de test d'affichage et ils peuvent �tre modifi�s ou effac�s
	 * @param args
	 */
	public static void main(String[] args) {
		JFrame a = new JFrame("window");
		VueGestionModifierArticle fer = new VueGestionModifierArticle(Francais.getInstance(),null);
		a.setLayout(new GridBagLayout());
		
//		fer.AddDataToFields("categorie", "code", "description", true, false);
		//fer.ClearInfo();
		
		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);
	}
}
