package de.ivu.elect.presentation.dashboard.entries;

import de.ivu.elect.business.wahl.boundary.WahlSessionSelector;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlConstants;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.menu.AbstractMenuModelBuilder;
import de.ivu.elect.presentation.menu.AbstractMenuItemEntry;
import de.ivu.elect.presentation.wahl.menu.WahlCreateMenuItemEntry;
import de.ivu.elect.presentation.wahl.menu.WahlSearchMenuItemEntry;

import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;

public class WahlDashboardEntry extends AbstractWahlOderWahlterminDashboardEntry {

  private static final long serialVersionUID = 1L;

  @Inject
  protected transient WahlSessionSelector wahlSessionSelector;

  @Inject
  private transient WahlDashboardSplitModelBuilder wahlDashboardSplitModelBuilder;

  @Inject
  protected transient WahlCreateMenuItemEntry wahlCreateMenuItemEntry;

  @Inject
  private transient WahlSearchMenuItemEntry searchMenuItemEntry;

  @Override
  protected  String getAusgewaehltKey() {
    return "dashboard.wahl.ausgewaehlte.wahl";
  }

  @Override
  protected  String getNichtAusgewaehltKey() {
    return "dashboard.wahl.ausgewaehlte.keine";
  }

  @Override
  protected String getWechselnKey() {
    return "dashboard.wahl.ausgewaehlen.wechseln.action.label";
  }

  @Override
  protected String getAuswaehlenKey() {
    return "dashboard.wahl.ausgewaehlen.action.label";
  }
  @Override
  protected boolean isSelected() {
    return wahlSessionSelector.isSelected();
  }

  @Override
  protected AbstractMenuModelBuilder getSplitButtonModelBuilder() {
    return wahlDashboardSplitModelBuilder;
  }

  @Override
  protected void addProperties(FormBuilder formBuilder) {
    if (wahlSessionSelector.isSelected()) {
      addPropertiesFuerWahl(formBuilder, wahlSessionSelector.getEntity());
    }
  }

  protected void addPropertiesFuerWahl(FormBuilder formBuilder, Wahl wahl) {
    formBuilder.addSeparator("dashboard.wahl.info.separator");
    formBuilder.addProperty(wahl.getProperties().getNameProperty()).readonly();
    formBuilder.addProperty(wahl.getWahltermin().getProperties().getWahldatumProperty()).readonly();
    formBuilder.addProperty(wahl.getWahlart().getProperties().getNameProperty())
        .withLabel(getMessage(WahlConstants.MESSAGE_KEY_WAHLART_ID_EINZAHL)).readonly();
  }


  @Override
  public List<AbstractMenuItemEntry> getMenuItemsLast() {
    List<AbstractMenuItemEntry> result = new ArrayList<>();

    // ELECT-6886
    result.add(wahlCreateMenuItemEntry);
    result.add(searchMenuItemEntry);

    return result;
  }

}

