package de.ivu.elect.presentation.wahl;

import java.util.Arrays;

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

import de.ivu.elect.business.CurrentCustomer;
import de.ivu.elect.business.wahl.control.WahlterminNummerRelevant;
import de.ivu.elect.business.wahl.entity.WahlartDokumentvorlagen;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.business.wahl.entity.WahlterminCreateDokumenteUebernehmen;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.redirect.Redirect;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;
import de.ivu.elect.presentation.wahl.action.WahlterminZurBearbeitungAuswaehlenAction;
import de.ivu.elect.presentation.wahl.form.WahlterminViewFormBuilder;

@OnlineHilfeId("433")
@Named(AbstractWahlterminCreateView.COMPONENT_NAME)
public class WahlterminCreateView extends AbstractWahlterminCreateView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlterminZurBearbeitungAuswaehlenAction wahlterminZurBearbeitungAuswaehlenAction;

  @Inject
  private transient  WahlterminViewFormBuilder viewFormBuilder;

  @Inject
  private transient WahlterminNummerRelevant wahlterminNummerRelevant;

  @Inject
  private transient CurrentCustomer currentCustomer;

  public WahlterminCreateView() {
    super();
  }

  @Override
  protected void setEntity(Wahltermin entity) {
    if (wahlterminNummerRelevant.isNummerRelevant()) {
      entity.setNummer(null); // Eingabe erzwingen
    }
    entity.setMandant(getMandant());
    super.setEntity(entity);

    if (isDokumentvorlagenVorhanden()) {
      entity.setDokumentvorlagen(null); // Vorlagen müssen ausgewählt werden
      entity.setWahlterminCreateDokumenteUebernehmen(WahlterminCreateDokumenteUebernehmen.UBERNEHMEN); // Vorlagen automatisch anlegen
    }

  }

  private boolean isDokumentvorlagenVorhanden() {
    return Arrays.stream(WahlartDokumentvorlagen.values()).anyMatch(
        wahlartDokumentvorlagen -> wahlartDokumentvorlagen.isVorlagenVorhanden() && wahlartDokumentvorlagen
            .isGeeignetFuer(currentCustomer.getCustomer(), getMandant().getSystemGebietsebene()));
  }

  @Override
  public void addProperties(FormBuilder formBuilder, Wahltermin wahltermin) {
    viewFormBuilder.addProperties(formBuilder, wahltermin);
  }

  @Override
  @Redirect
  public String save() {
    String redirectViewId = super.save();

    if (wahlterminZurBearbeitungAuswaehlenAction.isActionPossible(this.entity)) {
      return wahlterminZurBearbeitungAuswaehlenAction.action(this.entity);
    }

    return redirectViewId;
  }

}
