/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package mybank;

/**
 *
 * @author Verde
 */
public class ContoCorrente {
    private Persona intestatario;
    private double saldo;
    private int numeroContoCorrente;

    private static int totaleNumeriCorrenti;

    public ContoCorrente() {
    }

    public ContoCorrente(Persona intestatario, double saldo) {
        this.intestatario = intestatario;
        this.saldo = saldo;
        this.numeroContoCorrente = totaleNumeriCorrenti++;
        ScriviLeggiFile.log("Apertura del conto con saldo iniziale di " + this.saldo, numeroContoCorrente);
    }

    public int getNumeroContoCorrente() {
        return numeroContoCorrente;
    }

    public static int getTotaleNumeriCorrenti() {
        return totaleNumeriCorrenti;
    }

    public Persona getIntestatario() {
        return intestatario;
    }

    public double getSaldo() {
        return saldo;
    }

    public void versa(double quantita) {
        this.saldo += quantita;
        ScriviLeggiFile.log("Versamento di " + quantita + " effettuato con successo.", this.numeroContoCorrente);
        ScriviLeggiFile.salvaContoCorrente(this);
        logSaldoCorrente();
    }

    public void preleva(double quantita) throws IllegalArgumentException {
        if (quantita > this.saldo) {
            ScriviLeggiFile.log("Tentato prelievo di " + quantita + " fallito per superamento saldo.", this.numeroContoCorrente);
            logSaldoCorrente();
            throw new IllegalArgumentException("La quantità desiderata eccede il saldo corrente.");
        } else {
            this.saldo -= quantita;
            ScriviLeggiFile.log("Prelievo di " + quantita + " effettuato con successo.", this.numeroContoCorrente);
            ScriviLeggiFile.salvaContoCorrente(this);
            logSaldoCorrente();
        }
    }

    private void logSaldoCorrente() {
        ScriviLeggiFile.log("Saldo corrente: " + this.saldo + "\n", this.numeroContoCorrente);
    }

    @Override
    public String toString() {
        return "Intestatario: " + this.intestatario.toString() + "\nSaldo corrente: " + this.saldo
                + "\nNumero conto corrente: " + this.numeroContoCorrente;
    }
}