/*
 * 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;

import java.util.ArrayList;
import java.util.List;

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

    private static int totaleNumeriCorrenti;
    private static ArrayList<Integer> numeriContiCorrenti = new ArrayList<>();

    public ContoCorrente() {
    }

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

    public static List<Integer> getNumeriContiCorrenti() {
        return numeriContiCorrenti;
    }

    public static void setNumeriContiCorrenti(List<Integer> numeriContiCorrenti) {
        ContoCorrente.numeriContiCorrenti = (ArrayList<Integer>) numeriContiCorrenti;
    }

    public int getNumeroContoCorrente() {
        return numeroContoCorrente;
    }

    public Persona getIntestatario() {
        return intestatario;
    }

    public double getSaldo() {
        return saldo;
    }

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

    public void preleva(double quantita) throws IllegalArgumentException {
        if (quantita > this.saldo) {
            MyBank.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;
            MyBank.log("Prelievo di " + quantita + " effettuato con successo.", this.numeroContoCorrente);
            logSaldoCorrente();
        }
    }

    private void logSaldoCorrente() {
        MyBank.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;
    }
}