
package de.ivu.elect.presentation.wahl;

import static java.util.stream.Collectors.joining;

import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.gebietsbaum.entity.Gebietsart;
import de.ivu.elect.business.gebietsbaum.entity.GebietsartTK;
import de.ivu.elect.business.wahl.entity.Wahlart;
import de.ivu.elect.jee.faces.PreConditionCheck;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;
import de.ivu.elect.presentation.wahl.form.WahlartViewFormBuilder;

@OnlineHilfeId("466")
@Named(AbstractWahlartEditView.COMPONENT_NAME)
public class WahlartEditView extends AbstractWahlartEditView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlartViewFormBuilder wahlartViewFormBuilder;

  public WahlartEditView() {
    super();
  }

  @Override
  @PreConditionCheck
  public String checkPreCondition() {
    if (getEntity() == null) {
      return cancel();
    }

    return null;
  }

  @Override
  public void addProperties(FormBuilder formBuilder, Wahlart wahlart) {
    wahlartViewFormBuilder.addProperties(formBuilder, wahlart);
  }

  @Override
  protected boolean isGebietBearbeitenRechtPruefen() {
    return false;
  }

  @Override
  protected void callSave(Wahlart entity) {
    Set<GebietsartTK> nichtZuloeschendeGebietsarten = new HashSet<>(edit.save(entity, getZugeordneteGebietsarten()));

    if (!nichtZuloeschendeGebietsarten.isEmpty()) {
      addWarningMessage("wahlart.edit.gebietsart.kann.nicht.entfernt.werden", nichtZuloeschendeGebietsarten.stream().map(GebietsartTK::getName).sorted().collect(joining(", ")), entity.getName());
    }
  }

  protected List<Gebietsart> getZugeordneteGebietsarten() {
    return Collections.emptyList();
  }
}
