
package de.ivu.elect.business.entschaedigung.entity;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import de.ivu.elect.business.entschaedigung.boundary.AbstractEntschaedigungDAO;
import de.ivu.elect.business.entschaedigung.control.EntschaedigungAggregator;
import de.ivu.elect.business.person.entity.Personendaten;

public class AuszahlungCalculated {

  private final Auszahlung auszahlung;

  private final EntschaedigungAggregator entschaedigungAggregator;

  public AuszahlungCalculated(Auszahlung auszahlung, AbstractEntschaedigungDAO entschaedigungDAO) {
    this(auszahlung, auszahlung.getEntschaedigungen(entschaedigungDAO));
  }

  public AuszahlungCalculated(Auszahlung auszahlung, Collection<Entschaedigung> entschaedigungen) {
    super();

    this.auszahlung = auszahlung;

    this.entschaedigungAggregator = new EntschaedigungAggregator(entschaedigungen);
  }

  public String getBezeichnung() {
    return getAuszahlung().getBezeichnung();
  }

  public Auszahlung getAuszahlung() {
    return auszahlung;
  }

  public boolean hasEntschaedigungen() {
    return !getEntschaedigungen().isEmpty();
  }

  public List<Entschaedigung> getEntschaedigungen() {
    return entschaedigungAggregator.getEntschaedigungen();
  }

  public BigDecimal calculateEntschaedigungenGesamtbetrag() {
    return entschaedigungAggregator.calculateGesamtbetrag();
  }

  public String getEntschaedigungenWaehrungAlsIsoCode() {
    return entschaedigungAggregator.getWaehrungAlsIsoCode();
  }

  public Map<Personendaten, List<Entschaedigung>> getEntschaedigungenPerPersonendaten() {
    return entschaedigungAggregator.groupByPersonendaten();
  }

  public Map<Personendaten, Entschaedigung> getGesamtentschaedigungPerPersonendaten() {
    return entschaedigungAggregator.calculateGesamtentschaedigungPerPersonendaten();
  }

  public Map<String, List<Entschaedigung>> getEntschaedigungenPerPersonendatenArt() {
    return entschaedigungAggregator.groupByPersonendatenArt();
  }

  public Map<String, Entschaedigung> getGesamtentschaedigungPerPersonendatenArt() {
    return entschaedigungAggregator.calculateGesamtentschaedigungPerPersonendatenArt();
  }
}
