package bean;

import bean.validatoren.KeinDoppelter;
import bean.validatoren.Kreditrahmen;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import javax.validation.constraints.Min;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Length;

@Kreditrahmen(groups = KundeCheck3.class)
public class Kunde {

  @Length(min = 1, groups = KundeCheck1.class, message = "Name nicht leer")
  private String name;
  @Min(value = 0, groups = KundeCheck2.class, message = "Kreditrahmen nicht negativ")
  private BigInteger maxKredit;
  @Size(max = 4, message = "maximal vier Kredite", groups = KundeCheck3.class)
  @KeinDoppelter(groups = KundeCheck3.class) // evtl. eher
  private List<Kreditgeber> kredite = new ArrayList<Kreditgeber>();

  public void kreditHinzu(Kreditgeber k) {
    kredite.add(k);
  }

  public void loescheLetzten() {
    kredite.remove(kredite.size() - 1);
  }

  public BigInteger kreditsumme() {
    BigInteger summe = new BigInteger("0");
    for (Kreditgeber kg : kredite) {
      summe = summe.add(kg.getSumme());
    }
    return summe;
  }

  @Override
  public String toString() {
    StringBuffer erg = new StringBuffer(name + " max:" + maxKredit + " Kredite:\n");
    for (int i = 0; i < kredite.size(); i++) {
      erg.append("  (" + (i + 1) + ") " + kredite.get(i) + "\n");
    }
    erg.append("  Kreditsumme: " + kreditsumme() + "\n");
    return erg.toString();
  }

  public BigInteger getMaxKredit() {
    return maxKredit;
  }

  public void setMaxKredit(BigInteger maxKredit) {
    this.maxKredit = maxKredit;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}
