package com.softgraf.model;

import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;

import javax.swing.text.DateFormatter;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.MaskFormatter;
import javax.swing.text.NumberFormatter;

// 24
// padrão Factory
final public class MaskFactory {

	// classe não deve ser instanciada
	private MaskFactory() { }

	public static MaskFormatter numerica(int quant) {
		MaskFormatter maskNumero = null;
		char[] mask = new char[quant];
		Arrays.fill(mask, '#');

		try {
			maskNumero = new MaskFormatter(new String(mask));			
		} catch (ParseException e) {
			e.printStackTrace();
		}

		return maskNumero;
	}
	
	public static MaskFormatter fone() {
		MaskFormatter maskFone = null;

		try {
			maskFone = new MaskFormatter("(##)*####-####");			
		} catch (ParseException e) {
			e.printStackTrace();
		}

		return maskFone;
	}
	
	public static MaskFormatter cpf(){
		MaskFormatter maskCpf = null;
		
		try {
			maskCpf = new MaskFormatter("###.###.###-##");
			maskCpf.setPlaceholderCharacter('_');
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return maskCpf;
	}
	
	public static MaskFormatter cnpj(){
		MaskFormatter maskCnpj = null;
		
		try {
			maskCnpj = new MaskFormatter("##.###.###/####-##");
			maskCnpj.setPlaceholderCharacter('_');
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return maskCnpj;
	}
	
	
	// Ex.: maskMoeda = "##,###.00"
	public static DefaultFormatterFactory moeda(String maskMoeda) {
	    DecimalFormat dFormat = new DecimalFormat(maskMoeda) ;
	    NumberFormatter formatador = new NumberFormatter(dFormat) ;
	    formatador.setFormat(dFormat) ;
	    formatador.setAllowsInvalid(false) ; 
	    return new DefaultFormatterFactory (formatador);	    
	}
	
	public static DateFormatter data() {
		 DateFormatter maskData = new DateFormatter(new SimpleDateFormat("dd/MM/yyyy"));
		 maskData.setAllowsInvalid(false);
		 return maskData;
	}
	
}


