
package de.ivu.elect.presentation.gebietsbaum;

import de.ivu.elect.business.gebietsbaum.entity.GebietsartConstants;
import de.ivu.elect.business.gebietsbaum.entity.Gebietsarteigenschaft;
import de.ivu.elect.business.gebietsbaum.entity.GebietsarteigenschaftConstants;
import de.ivu.elect.business.gebietsbaum.entity.GebietsarteigenschaftProperties;
import de.ivu.elect.business.mandant.control.MandantSupport;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.wahl.boundary.WahlartExtendedDAO;
import de.ivu.elect.business.wahl.entity.AbstractWahlart;
import de.ivu.elect.business.wahl.entity.Wahlart;
import de.ivu.elect.business.wahl.entity.WahlartConstants;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.LambdaEntitySelectOneMenuProperty;
import de.ivu.elect.presentation.View;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import java.util.List;

/**
 *  on 29.06.2015.
 */

@RequestScoped
@OnlineHilfeId("474")
@Named(AbstractGebietsarteigenschaftEditNoScopeView.COMPONENT_NAME)
@View(viewId = AbstractGebietsarteigenschaftEditNoScopeView.VIEW_ID, useCase = UseCasePermission.GEBIETSARTEIGENSCHAFT_EDIT)
public class GebietsarteigenschaftEditView extends AbstractGebietsarteigenschaftEditView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlartExtendedDAO wahlartExtendedDAO;

  @Inject
  private transient MandantSupport mandantSupport;

  public GebietsarteigenschaftEditView() {
    super();
  }

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

  @Override
  public void addProperties(FormBuilder formBuilder, Gebietsarteigenschaft gebietsarteigenschaft) {
    formBuilder.addProperty(gebietsarteigenschaft.getWahlart().getProperties().getNameProperty()).readonly()
        .withLabel(getMessage(WahlartConstants.MESSAGE_KEY_ENTITY_EINZAHL));
    formBuilder.addProperty(gebietsarteigenschaft.getGebietsart().getProperties().getNameProperty()).readonly()
        .withLabel(getMessage(GebietsartConstants.MESSAGE_KEY_ENTITY_EINZAHL));

    GebietsarteigenschaftProperties properties = gebietsarteigenschaft.getProperties();
    formBuilder.addProperty(properties.getWahlgebietProperty());
    // ELECT-8198 formBuilder.addProperty(properties.getErgebnisRelevantProperty());
    formBuilder.addProperty(properties.getErfassungsgebietProperty());
    formBuilder.addProperty(properties.getBriefwahlgebietProperty());
    formBuilder.addProperty(properties.getDirektwahlgebietProperty());
    formBuilder.addProperty(properties.getListenwahlgebietProperty());
    formBuilder.addProperty(properties.getReferendumgebietProperty());
    formBuilder.addProperty(properties.getListenkandidatenWaehlbarProperty());

    if (hasPermission(UseCasePermission.WAHL_FUER_SUBSYSTEME_KONFIGURIEREN) && mandantSupport.isMandantenUnterstuetzt()){
      List<Wahlart> wahlarten = wahlartExtendedDAO.findByAllOrderByName(gebietsarteigenschaft.getWahlart().getMandant());
      formBuilder.addProperty(new LambdaEntitySelectOneMenuProperty<>(wahlarten, gebietsarteigenschaft::setWahlartBeiAufteilung,
          gebietsarteigenschaft::getWahlartBeiAufteilung,
          AbstractWahlart::getNameGuiEindeutig,
          GebietsarteigenschaftConstants.MESSAGE_KEY_WAHLART_BEI_AUFTEILUNG_ID_EINZAHL, false, true));
    }

  }
}
