/**
 * 
 */
package view.tool.inputField;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JTextArea;

import tool.regEx.DataNormalizer;


/**
 * @author Alexis Caron
 *
 */
public class JValidTextArea extends JTextArea implements KeyListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = 9077271670084319146L;
	private boolean allowCertainCaracter;
	private String caractersRegex;
	
	/**
	 * Constructeur avec text en parametre
	 * @param text String
	 */
	private JValidTextArea(int line_height, String text, boolean _allowCertainCaracter, String regex) {
		super(line_height,80);
		this.setText(text);
		allowCertainCaracter = _allowCertainCaracter;
		caractersRegex = regex;
		this.addKeyListener(this);
	}
	
	/**
	 * @return default JValidTextArea 
	 */
	public static JValidTextArea JValidTextFieldWithoutText(int line_height){
		return new JValidTextArea(line_height,"",false,"");
	}
	
	/**
	 * @param _text
	 * @return JValidTextArea with text
	 */
	public static JValidTextArea JValidTextFieldWithText(int line_height,String _text){
		return new JValidTextArea(line_height,_text,false,"");
	}
	
	/**
	 * @param _allowedCaracters
	 * @return JValidTextArea which allows only certain character
	 */
	public static JValidTextArea JValidTextFieldAllowCertainCharacter(int line_height,String regex){
		return new JValidTextArea(line_height,"",true,regex);
	}
	
	/**
	 * @param _allowedCaracters
	 * @return JValidTextArea which disallow certain character
	 */
	public static JValidTextArea JValidTextFieldDisallowCertainCharacter(int line_height,String regex){
		return new JValidTextArea(line_height,"",false,regex);
	}
	
	/**
	 * @param _allowedCaracters
	 * @param _text
	 * @return JValidTextArea which allow certain character and has text
	 */
	public static JValidTextArea JValidTextFieldWithTextAllowCertainCharacter(int line_height,String regex, String _text){
		return new JValidTextArea(line_height,_text,true,regex);
	}
	
	/**
	 * @param _allowedCaracters
	 * @param _text
	 * @return JValidTextArea which disallow certain character and has text
	 */
	public static JValidTextArea JValidTextFieldWithTextDisallowCertainCharacter(int line_height,String regex, String _text){
		return new JValidTextArea(line_height,_text,false,regex);
	}
	
	@Override
	public void keyPressed(KeyEvent arg0) {}

	@Override
	public void keyReleased(KeyEvent arg0) {}

	@Override
	public void keyTyped(KeyEvent e) {
		String pressed = Character.toString(e.getKeyChar()).toUpperCase();
		
		//if caracter is not allowed by normalizer
		if(DataNormalizer.normalize(pressed).equals(""))
			e.consume();
		
		if(pressed.matches(caractersRegex))
		{
			//disallow mode
			if(!allowCertainCaracter)
			{
				e.consume();
			}
			e.setKeyChar(Character.toUpperCase(e.getKeyChar()));
			return;
		}
		
		//allowMode
		if(allowCertainCaracter)
		{
			e.consume();
		}
		e.setKeyChar(Character.toUpperCase(e.getKeyChar()));
	}
}