/**
 *  Rappresenta un conto corrente in una banca con spese
 *
 * @author     Antonio Terreno
 * @created    14 maggio 2002
 */

public class ContoCorrenteConSpese extends ContoCorrente {

        /**
         *  Numero delle operazioni gratuite
         */
        public final static int NUMOPERAZIONIGRATIS = 2;
        /**
         *  Costo di ogni operazione
         */
        public final static int COSTOOPERAZIONE = 1;

        private int numOperazioni;


        /**
         *Costruttore dell'oggetto ContoCorrenteConSpese
         *
         * @param  nome           Nome del correntista
         * @param  saldoiniziale  Saldo iniziale
         */
        public ContoCorrenteConSpese(String nome, int saldoiniziale) {
                super(nome, saldoiniziale);
                numOperazioni = 0;
        }


        /**
         *Costruttore dell'oggetto ContoCorrenteConSpese
         *
         * @param  nome  Nome del correntista
         */
        public ContoCorrenteConSpese(String nome) {
                super(nome);
                numOperazioni = 0;
        }


        /**
         *  Preleva considerando il numero di operazioni
         *
         * @param  valore               Somma da prelevare
         * @exception  MovimentoErrato  Eccezione di tipo MovimentoErrato
         */
        public void preleva(int valore) throws MovimentoErrato{
                super.preleva(valore);
                numOperazioni += 1;
        }


        /**
         *  Deposita considerando il numero di operazioni
         *
         * @param  valore               Somma da depositare
         * @exception  MovimentoErrato  Eccezione di tipo MovimentoErrato
         */
        public void deposita(int valore) throws MovimentoErrato {
                super.deposita(valore);
                numOperazioni += 1;
        }


        /**
         *  Calcolo delle competenze
         *
         * @return    Interessi maturati meno spese
         */
        public int calcoloCompetenze() {
                if (numOperazioni <= NUMOPERAZIONIGRATIS) {
                        return super.calcoloCompetenze();
                } else {
                        return super.calcoloCompetenze() - COSTOOPERAZIONE * numOperazioni;
                }
        }
}