import java.awt.*;
import javax.swing.*;

/**
 *  Vista per il modello ContoCorrente
 *
 * @author     Antonio Terreno
 * @created    20 giugno 2002
 */
public class ContoCorrenteView extends JPanel implements ContoCorrenteInterfaceView {

        /**
         *Costruttore per l'oggetto ContoCorrenteView
         *
         * @param  model  Modello
         */
        public ContoCorrenteView(ContoCorrente[] model) {
                setLayout(new BorderLayout());
                conto = model;
                JPanel panelNorth = new JPanel(new FlowLayout());

                labelName = new JLabel("Nome Correntista:");
                panelNorth.add(labelName);
                add(panelNorth, BorderLayout.NORTH);

                textName = new JTextField("");
                textName.setColumns(10);
                textName.setBorder(BorderFactory.createEtchedBorder());
                textName.setEnabled(false);
                panelNorth.add(textName);
                add(panelNorth, BorderLayout.NORTH);

                labelCC = new JLabel("Numero Conto:");
                panelNorth.add(labelCC);
                add(panelNorth, BorderLayout.NORTH);

                textCC = new JTextField("");
                textCC.setColumns(10);
                textCC.setBorder(BorderFactory.createEtchedBorder());
                textCC.setEnabled(true);
                panelNorth.add(textCC);
                add(panelNorth, BorderLayout.NORTH);


                JPanel panelEast = new JPanel(new FlowLayout());
                textPrelievo = new JTextField("0");
                textPrelievo.setColumns(4);
                textPrelievo.setEnabled(false);
                textPrelievo.setBorder(BorderFactory.createEtchedBorder());
                panelEast.add(textPrelievo);
                add(panelEast, BorderLayout.EAST);

                JPanel panelWest = new JPanel(new FlowLayout());
                textVersamento = new JTextField("0");
                textVersamento.setColumns(4);
                textVersamento.setEnabled(false);
                textVersamento.setBorder(BorderFactory.createEtchedBorder());
                panelWest.add(textVersamento);
                add(panelWest, BorderLayout.WEST);

                bottoni = new ContoCorrenteControl(conto, this);
                JPanel panelCenter = new JPanel(new BorderLayout());
                panelCenter.add(bottoni);
                add(panelCenter, BorderLayout.CENTER);

                JPanel panelSouth = new JPanel(new BorderLayout());
                textInfo = new JTextArea("");
                textInfo.setLineWrap(true);
                textInfo.setEditable(false);
                textInfo.setBorder(BorderFactory.createEtchedBorder());
                panelSouth.add(textInfo);
                add(panelSouth, BorderLayout.SOUTH);
                updateView();

        }


        /**
         *  Aggiorna la vista
         */
        public void updateView() {
                textInfo.setText(answer);
                setName();
        }


        /**
         *  Setta l'attributo name dell'oggetto conto corrente vista
         */
        public void setName() {
                try {
                        name = ContoCorrente.getNomeCorrentista(this.getTextCC());
                } catch (MovimentoErrato me) {
                        setError(me.getErr());
                } catch (RuntimeException re) {}
                textName.setText(name);
        }


        /**
         *  Visualizza il credito disponibile
         *
         * @param  nome  Nome del correntista
         */
        public void displaySaldo(String nome) {
                try {
                        answer = "Credito Disponibile: " + ContoCorrente.getSaldo(nome);
                } catch (MovimentoErrato me) {
                        setError(me.getErr());
                }
        }


        /**
         *  Visualizza il credito disponibile
         *
         * @param  numConto  Numero del conto corrente
         */
        public void displaySaldo(int numConto) {
                try {
                        answer = "Credito Disponibile: " + ContoCorrente.getSaldo(numConto);
                } catch (MovimentoErrato me) {
                        setError(me.getErr());
                }
        }


        /**
         *  Setta l'answer dell'oggetto ContoCorrenteView con err
         *
         * @param  err  Il nuovo valore dell'error
         */
        public void setError(String err) {
                answer = err;

        }


        /**
         *  Setta a val true/false i JTextField della vista
         *
         * @param  val  Editable/Not Editable
         */
        public void setFields(boolean val) {
                textCC.setEnabled(!val);
                textPrelievo.setEnabled(val);
                textVersamento.setEnabled(val);
        }


        /**
         *  Restituisce il valore di textName dell'oggetto ContoCorrenteView
         *
         * @return    Il valore di textName
         */
        public String getTextName() {
                return (textName.getText()).trim();
        }


        /**
         *  Restituisce il valore di textCC dell'oggetto ContoCorrenteView
         *
         * @return    Il valore di textCC
         */
        public int getTextCC() {
                return Integer.parseInt((textCC.getText()).trim());
        }


        /**
         *  Restituisce il valore di textPrelievo dell'oggetto ContoCorrenteView
         *
         * @return    Il valore di textPrelievo
         */
        public int getTextPrelievo() {
                return Integer.parseInt((textPrelievo.getText()).trim());
        }


        /**
         *  Restituisce il valore di textVersamento dell'oggetto ContoCorrenteView
         *
         * @return    Il valore di textVersamento
         */
        public int getTextVersamento() {
                return Integer.parseInt((textVersamento.getText()).trim());
        }


        private ContoCorrente[] conto;
        private JLabel labelName;
        private JLabel labelCC;
        private JTextField textName;
        private JTextField textCC;
        private JTextField textPrelievo;
        private JTextField textVersamento;
        private JTextArea textInfo;
        private String inputString;
        private int inputInt;

        private String name;
        private String answer;
        private ContoCorrenteControl bottoni;
}