package gui;

import java.awt.Font;
import java.awt.Rectangle;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import contas.Conta;
import contas.ContaJaCadastradaException;
import contas.ContaNaoEncontradaException;
import contas.RepositorioContasArray;
import contas.SaldoInsuficienteException;
import fachada.Banco;

public class FrameBanco extends JFrame {

	private Banco fachada;
	private static final long serialVersionUID = 1L;

	private JPanel jContentPane = null;

	private JButton bt_cadastrar = null;

	private JButton bt_creditar = null;

	private JButton bt_debitar = null;

	private JButton bt_saldo = null;

	private JTextField tf_numero = null;

	private JTextField tf_valor = null;

	private JLabel jLabel = null;

	private JLabel jLabel1 = null;

	private JLabel jLabel2 = null;

	/**
	 * This method initializes bt_cadastrar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBt_cadastrar() {
		if (bt_cadastrar == null) {
			bt_cadastrar = new JButton();
			bt_cadastrar.setBounds(new Rectangle(16, 168, 95, 32));
			bt_cadastrar.setText("Cadastrar");
			bt_cadastrar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					cadastrar();
				}
			});
		}
		return bt_cadastrar;
	}


	/**
	 * This method initializes bt_creditar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBt_creditar() {
		if (bt_creditar == null) {
			bt_creditar = new JButton();
			bt_creditar.setBounds(new Rectangle(122, 168, 95, 32));
			bt_creditar.setText("Creditar");
			bt_creditar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					creditar();
				}
			});
		}
		return bt_creditar;
	}

	/**
	 * This method initializes bt_debitar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBt_debitar() {
		if (bt_debitar == null) {
			bt_debitar = new JButton();
			bt_debitar.setBounds(new Rectangle(228, 168, 95, 32));
			bt_debitar.setText("Debitar");
			bt_debitar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					debitar();
				}
			});
		}
		return bt_debitar;
	}

	/**
	 * This method initializes bt_saldo	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBt_saldo() {
		if (bt_saldo == null) {
			bt_saldo = new JButton();
			bt_saldo.setBounds(new Rectangle(334, 168, 95, 32));
			bt_saldo.setText("Saldo");
			bt_saldo.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					saldo();
				}
			});			
		}
		return bt_saldo;
	}

	/**
	 * This method initializes tf_numero	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTf_numero() {
		if (tf_numero == null) {
			tf_numero = new JTextField();
			tf_numero.setBounds(new Rectangle(165, 62, 170, 29));
		}
		return tf_numero;
	}

	/**
	 * This method initializes tf_valor	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTf_valor() {
		if (tf_valor == null) {
			tf_valor = new JTextField();
			tf_valor.setBounds(new Rectangle(165, 108, 170, 29));
		}
		return tf_valor;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		FrameBanco frame = new FrameBanco();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

	/**
	 * This is the default constructor
	 */
	public FrameBanco() {		
		super();
		this.fachada = new Banco(new RepositorioContasArray());
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(444, 243);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jLabel2 = new JLabel();
			jLabel2.setBounds(new Rectangle(70, 106, 69, 29));
			jLabel2.setText("Valor");
			jLabel1 = new JLabel();
			jLabel1.setBounds(new Rectangle(70, 62, 69, 29));
			jLabel1.setText("Número");
			jLabel = new JLabel();
			jLabel.setBounds(new Rectangle(21, 4, 370, 48));
			jLabel.setFont(new Font("Dialog", Font.BOLD, 18));
			jLabel.setHorizontalAlignment(SwingConstants.CENTER);
			jLabel.setText("Aplicação Bancária");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getBt_cadastrar(), null);
			jContentPane.add(getBt_creditar(), null);
			jContentPane.add(getBt_debitar(), null);
			jContentPane.add(getBt_saldo(), null);
			jContentPane.add(getTf_numero(), null);
			jContentPane.add(getTf_valor(), null);
			jContentPane.add(jLabel, null);
			jContentPane.add(jLabel1, null);
			jContentPane.add(jLabel2, null);
		}
		return jContentPane;
	}
	
	private void cadastrar() {	
		try {
			String numero  = tf_numero.getText();
			String s_valor = tf_valor.getText();
			double valor = (new Double(s_valor)).doubleValue();		
			Conta conta = new Conta(numero, valor);
			fachada.cadastrar(conta);
			JOptionPane.showMessageDialog(this, "Conta cadastrada com sucesso!");
			limpa();
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(this, "Valor deve ser um número real");
			limpaValor();
		} catch (ContaJaCadastradaException e) {
			JOptionPane.showMessageDialog(this, "Conta já cadastrada, escolha outro número");
			limpaNumero();
		}		
	}

	private void creditar() {	
		try {
			String numero  = tf_numero.getText();
			String s_valor = tf_valor.getText();
			double valor = (new Double(s_valor)).doubleValue();
			fachada.creditar(numero, valor);
			JOptionPane.showMessageDialog(this, "Crédito realizado com sucesso!");
			limpa();
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(this, "Valor deve ser um número real");
			limpaValor();
		} catch (ContaNaoEncontradaException e) {
			JOptionPane.showMessageDialog(this, "Conta não cadastrada, confira o número");
			limpaNumero();
		}		
	}
	
	private void debitar() {	
		try {
			String numero  = tf_numero.getText();
			String s_valor = tf_valor.getText();
			double valor = (new Double(s_valor)).doubleValue();
			fachada.debitar(numero, valor);
			JOptionPane.showMessageDialog(this, "Debito realizado com sucesso!");
			limpa();
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(this, "Valor deve ser um número real");
			limpaValor();
		} catch (ContaNaoEncontradaException e) {
			JOptionPane.showMessageDialog(this, "Conta não cadastrada, confira o número");
			limpaNumero();
		} catch (SaldoInsuficienteException e) {
			JOptionPane.showMessageDialog(this, e.getMessage());
			limpaValor();
		}		
	}	

	private void saldo() {	
		try {
			String numero  = tf_numero.getText();
			double saldo = fachada.saldo(numero);			
			JOptionPane.showMessageDialog(this, "O saldo atual é "+saldo);
			limpaValor();
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(this, "Valor deve ser um número real");
			limpaValor();
		} catch (ContaNaoEncontradaException e) {
			JOptionPane.showMessageDialog(this, "Conta não cadastrada, confira o número");
			limpaNumero();
		}
	}
	private void limpaNumero() {
		tf_numero.setText("");
	}
	private void limpaValor() {
		tf_valor.setText("");
	}
	private void limpa() {
		limpaNumero();
		limpaValor();
	}
}  //  @jve:decl-index=0:visual-constraint="10,10"
