package com.softgraf.view;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

import com.softgraf.control.Limite;
import com.softgraf.control.Modo;
import com.softgraf.control.listeners.ValidarFone;
import com.softgraf.control.listeners.ValidarString;
import com.softgraf.model.abstrato.Estados;
import com.softgraf.model.dao.ClienteDAO;
import com.softgraf.model.vo.Cliente;
import com.softgraf.view.abstrato.AbstractGenericView;
import com.softgraf.view.vcomponentes.VCampoCpfCnpj;
import com.softgraf.view.vcomponentes.VCampoFone;
import com.softgraf.view.vcomponentes.VCampoNumerico;
import com.softgraf.view.vcomponentes.VCampoTexto;
import com.softgraf.view.vcomponentes.VGrupoComboBox;
import com.softgraf.view.vcomponentes.VGrupoRadioButton;

// 56
public class ClienteView extends AbstractGenericView<Cliente, ClienteDAO>{

	private static final long serialVersionUID = 1L;
	private VCampoNumerico idCliente;
	private VGrupoRadioButton grupoRadioPFJ;
	private VCampoCpfCnpj numCpfCnpj;
	private VCampoTexto txtNome, txtAssinatura, txtEmail, txtRg, txtEndereco, txtBairro, txtCidade;
	private VCampoFone txtFone1, txtFone2, txtFone3;
	private VGrupoComboBox cmbUF;

	public ClienteView(JFrame frame, Cliente vo, ClienteDAO dao, Modo modo) {
		super(frame, new Dimension(600, 500), vo, dao, modo);
	}

	@Override
	protected void inicializaComponentes() {
		idCliente = new VCampoNumerico("ID:", Limite.IDCLIENTE);
		grupoRadioPFJ = new VGrupoRadioButton("Pessoa:", getVo().isPessoa() ? 0 : 1, "Física", "Jurídica");
		numCpfCnpj = new VCampoCpfCnpj("CPF/CNPJ:", getVo().isPessoa());
		
		txtNome = new VCampoTexto("nome:", 460, Limite.NOMECLIENTE);
		txtAssinatura = new VCampoTexto("Assinatura:", 460, Limite.ASSINATURA);
		txtEmail = new VCampoTexto("E-mail:", 260, Limite.EMAIL);
		txtRg = new VCampoTexto("RG:", 150, Limite.RG);
		
		txtFone1 = new VCampoFone("Fone 1:");
		txtFone2 = new VCampoFone("Fone 2:");
		txtFone3 = new VCampoFone("Fone 3:");
		
		txtEndereco = new VCampoTexto("Endereço:", 250, Limite.ENDERECO);
		txtBairro = new VCampoTexto("Bairro:", 140, Limite.BAIRRO);
		txtCidade = new VCampoTexto("Cidade:", 250, Limite.CIDADE);
		cmbUF = new VGrupoComboBox("Estado:", Estados.listarEstados());
	}

	@Override
	protected void adicionaComponentes() {
		addVComponente(idCliente, grupoRadioPFJ, numCpfCnpj, txtNome, txtAssinatura, txtEmail, txtRg, 
				       txtFone1, txtFone2, txtFone3, txtEndereco, txtBairro, txtCidade, cmbUF);
	}

	@Override
	protected void preencheCampos() {
		setCampos(getVo().toArray(), idCliente, grupoRadioPFJ, txtNome, txtAssinatura, numCpfCnpj, txtRg, 
				  txtEmail, txtEndereco, txtBairro, txtCidade, cmbUF, txtFone1, txtFone2, txtFone3);
	}	

	@Override
	protected void configuraModoEacoes() {
		setEditableFalse(idCliente); 
					
		if (getModo() != Modo.CONSULTA) {
			setCamposObrigatorios(txtNome, numCpfCnpj, txtFone1);

			numCpfCnpj.setFocusListener(grupoRadioPFJ.getSelecionado() == 0);  // PF
			
			grupoRadioPFJ.addActionListener(new ActionListener() {	
				@Override
				public void actionPerformed(ActionEvent e) {
					boolean isCPF = grupoRadioPFJ.getSelecionado() == 0;   // PF
					numCpfCnpj.setMascara(isCPF);
					numCpfCnpj.setFocusListener(isCPF);
					numCpfCnpj.requestFocus();
				}
			});
			
			txtNome.addFocusListener(new ValidarString(4));
			txtFone1.addFocusListener(new ValidarFone());
		}
	}
	
	@Override
	protected boolean acaoOK() {
		if (validarCampos(numCpfCnpj, txtNome, txtFone1) && super.acaoOK()) {

			Cliente vo = getVo();
			vo.setPessoa(grupoRadioPFJ.getSelecionado() == 0);
			vo.setCpf_cnpj(numCpfCnpj.getText());
			vo.setNome(txtNome.getTextoTrim());
			vo.setAssinatura(txtAssinatura.getTextoTrim());
			vo.setEmail(txtEmail.getTextoTrim());
			vo.setRg(txtRg.getTextoTrim());
			vo.setFone1(txtFone1.getText());
			vo.setFone2(txtFone2.getText());
			vo.setFone3(txtFone3.getText());
			vo.setEndereco(txtEndereco.getTextoTrim());
			vo.setBairro(txtBairro.getTextoTrim());
			vo.setCidade(txtCidade.getTextoTrim());
			vo.setUf(cmbUF.getItemSelecionado().substring(0, 2));
			
			return true;
		}
		
		return false;
	}
		
		
}
