package br.cin.ufpe.gui;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;

import br.ufpe.cin.banco.Banco;
import br.ufpe.cin.banco.ContaAbstrata;
import br.ufpe.cin.banco.ContaImposto;
import br.ufpe.cin.banco.ContaJaCadastradaException;
import br.ufpe.cin.banco.ValorNegativoException;
import br.ufpe.cin.dados.ContaNaoEncontradaException;
import br.ufpe.cin.dados.RepositorioContas;
import br.ufpe.cin.dados.RepositorioContasArray;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class FrameBanco extends JFrame {

	private Banco fachada;
	private JPanel contentPane;
	private JTextField tf_numero;
	private JTextField tf_valor;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					FrameBanco frame = new FrameBanco();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public FrameBanco() {
		
		RepositorioContas rep = new RepositorioContasArray(100);
		fachada = new Banco(rep);
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNumero = new JLabel("N\u00FAmero");
		lblNumero.setBounds(10, 10, 200, 50);
		contentPane.add(lblNumero);
		
		tf_numero = new JTextField();
		tf_numero.setBounds(100, 25, 86, 20);
		contentPane.add(tf_numero);
		tf_numero.setColumns(10);
		
		tf_valor = new JTextField();
		tf_valor.setBounds(100, 71, 86, 20);
		contentPane.add(tf_valor);
		tf_valor.setColumns(10);
		
		JLabel lblValor = new JLabel("Valor");
		lblValor.setBounds(10, 56, 200, 50);
		contentPane.add(lblValor);
		
		JButton btnCreditar = new JButton("Creditar");
		btnCreditar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				creditar();
			}
		});
		btnCreditar.setBounds(10, 126, 89, 23);
		contentPane.add(btnCreditar);
		
		JButton btnCadastrar = new JButton("Cadastrar");
		btnCadastrar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				cadastrar();
			}
		});
		btnCadastrar.setBounds(135, 126, 89, 23);
		contentPane.add(btnCadastrar);
		
		JButton btnSaldo = new JButton("Saldo");
		btnSaldo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				saldo();
			}
		});
		btnSaldo.setBounds(268, 126, 89, 23);
		contentPane.add(btnSaldo);
	}
	
	private void cadastrar () {
		try {
			String numero = tf_numero.getText();
			ContaAbstrata conta = new ContaImposto(numero);
			fachada.cadastrar(conta);
			JOptionPane.showMessageDialog(this, "Conta cadastrada com sucesso!");
		} catch(ContaJaCadastradaException e) {
			JOptionPane.showMessageDialog(this, e.getMessage());
		}
	}
	
	private void creditar () {
		try {
			String numero = tf_numero.getText();
			String v = tf_valor.getText();
			double valor = Double.parseDouble(v);
			fachada.creditar(numero, valor);
			JOptionPane.showMessageDialog(this, "Crédito realizado com sucesso!");
		} catch(ContaNaoEncontradaException e) {
			JOptionPane.showMessageDialog(this, e.getMessage());
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(this, "O valor deve ser um número real!");
		} catch (ValorNegativoException e) {
			JOptionPane.showMessageDialog(this, e.getMessage());
		}

	}
	
	private void saldo () {
		try {
			String numero = tf_numero.getText();
			double saldo = fachada.getSaldo(numero);
			JOptionPane.showMessageDialog(this, "Seu saldo é de: "+saldo);
		} catch(ContaNaoEncontradaException e) {
			JOptionPane.showMessageDialog(this, e.getMessage());
		}

	}
}
