package de.ivu.elect.presentation;

import java.util.List;

import javax.annotation.Nullable;
import javax.enterprise.inject.Specializes;
import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.boundary.GebietExtendedDAO;
import de.ivu.elect.business.wahl.boundary.WahlExtendedDAO;
import de.ivu.elect.business.wahl.boundary.WahlSessionSelect;
import de.ivu.elect.business.wahl.entity.NlWahlCustomData;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagExtendedDAO;
import de.ivu.elect.jee.faces.PreConditionCheck;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.ReadOnlyBooleanProperty;
import de.ivu.elect.jee.presentation.dynamicform.ReadOnlyStringProperty;

@Specializes
public class NlWasBlankView extends BlankView {
  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlSessionSelect wahlSessionSelect;

  @Inject
  private transient WahlExtendedDAO wahlExtendedDAO;

  @Inject
  private transient WahlvorschlagExtendedDAO wahlvorschlagExtendedDAO;

  @Inject
  private transient GebietExtendedDAO gebietExtendedDAO;

  @Override
  @Nullable
  @PreConditionCheck
  public String checkPreCondition() {
    if (!wahlSessionSelect.isSelected()) {
      List<Wahl> wahlen = wahlExtendedDAO.findByAll(getMandant());
      if (!wahlen.isEmpty()) {
        wahlSessionSelect.setEntity(wahlen.get(0));
        return getStartViewId();
      }
    }
    return super.checkPreCondition();
  }

  @Override
  protected void addProperties(FormBuilder formBuilder) {
    super.addProperties(formBuilder);

    Wahl wahl = wahlSessionSelect.getEntity();
    formBuilder.addProperty(new ReadOnlyBooleanProperty(getMessage("nl.was.blank.wahl.vorhanden"), wahl != null));
    if (wahl != null) {
      formBuilder.addProperty(
          new ReadOnlyStringProperty(getMessage("nl.was.blank.wahl.phase"), getMessage(wahl.getCustomData(NlWahlCustomData.class).getNlWahlPhase())));

//      formBuilder.addProperty(new ReadOnlyBooleanProperty(getMessage("nl.was.blank.wahlvorschlaege.vorhanden"), !wahlvorschlagExtendedDAO.findByWahl(wahl).isEmpty()));
//      formBuilder.addProperty(new ReadOnlyBooleanProperty(getMessage("nl.was.blank.erfassungsgebiete.vorhanden"), (gebietExtendedDAO.findByWahl(wahl).stream().anyMatch(AbstractGebiet::isErfassungsgebiet))));
    }

  }
}
