
package de.ivu.elect.presentation.person;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import org.apache.deltaspike.core.api.scope.ConversationGroup;

import de.ivu.elect.business.entschaedigung.boundary.EntschaedigungBulkEdit;
import de.ivu.elect.business.entschaedigung.boundary.EntschaedigungBulkEditConversationStore;
import de.ivu.elect.business.entschaedigung.boundary.EntschaedigungCalculator;
import de.ivu.elect.business.entschaedigung.entity.Entschaedigung;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.person.entity.PersonendatenArt;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.security.control.ElectCommonPrincipal;

public class PersonendatenEntschaedigungEditViewHelper implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient ElectCommonPrincipal principal;

  @Inject
  private transient EntschaedigungCalculator entschaedigungCalculator;

  @Inject
  private transient EntschaedigungBulkEdit entschaedigungBulkEdit;

  @Inject
  @ConversationGroup(EntschaedigungBulkEditConversationStore.class)
  private transient EntschaedigungBulkEditConversationStore entschaedigungBulkEditConversationStore;

  public PersonendatenEntschaedigungEditViewHelper() {
    super();
  }

  public List<Entschaedigung> calculateEntschaedigungen(PersonendatenArt personendatenArt, Personendaten personendaten) {
    return entschaedigungBulkEditConversationStore.addEntschaedigungen(calculateEntschaedigungenVorgesehenGesamtbetragZeroIncluded(personendatenArt, personendaten));
  }

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

  public boolean isBtnSaveRendered() {
    return principal.hasUseCasePermission(UseCasePermission.ENTSCHAEDIGUNG_EDIT);
  }

  public void save() {
    entschaedigungBulkEdit.saveEntschaedigungenBearbeitet(getEntschaedigungen());

    entschaedigungBulkEditConversationStore.close();
  }

  public void reset() {
    entschaedigungBulkEditConversationStore.close();
  }

  private List<Entschaedigung> calculateEntschaedigungenVorgesehenGesamtbetragZeroIncluded(PersonendatenArt personendatenArt, Personendaten personendaten) {
    return new ArrayList<>(entschaedigungCalculator.calculateEntschaedigungenVorgesehenGesamtbetragZeroIncluded(personendatenArt, personendaten));
  }
}
