package de.ivu.elect.presentation.stimmzettel;

import java.util.List;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.stimmzettel.boundary.StimmzettelKopfdatumChangeEvent;
import de.ivu.elect.business.stimmzettel.entity.StimmzettelKopfdatum;
import de.ivu.elect.business.stimmzettel.entity.StimmzettelKopfdatumConstants;
import de.ivu.elect.jee.faces.FacesContextUtil;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.ReadOnlyStringProperty;
import de.ivu.elect.jee.presentation.redirect.Redirect;
import de.ivu.elect.presentation.gebietsbaum.GebietNummerFormatter;

@RequestScoped
@Named(AbstractStimmzettelKopfdatumEditView.COMPONENT_NAME)
public class StimmzettelKopfdatumEditView extends AbstractStimmzettelKopfdatumEditView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient StimmzettelKopfdatumChangeEvent changeEvent;

  @Inject
  private transient GebietNummerFormatter gebietNummerFormatter;

  @Redirect
  public String deleteSearched(List<StimmzettelKopfdatum> stimmzettelKopfdatumList) {
    if (!stimmzettelKopfdatumList.isEmpty()) {
      executeDeleteSearched(stimmzettelKopfdatumList);
      addInfoMessage("entity.edit.action.delete.success.message", entityMeta.getMehrzahlMessage());
    }
    changeEvent.sendChangeEvent(); // ELECT-5585
    return FacesContextUtil.getCurrentViewId();
  }

  protected void executeDeleteSearched(List<StimmzettelKopfdatum> stimmzettelKopfdatumList) {
    edit.deleteSearched(stimmzettelKopfdatumList);
  }

  @Override
  protected void addProperties(FormBuilder formBuilder, StimmzettelKopfdatum entity) {
    formBuilder.addProperty(new ReadOnlyStringProperty(getMessage(StimmzettelKopfdatumConstants.MESSAGE_KEY_ENTITY_EINZAHL),
        getMessage(entity.getStimmzettelKopfdatumArt())));

    formBuilder.addProperty(new ReadOnlyStringProperty(getMessage(StimmzettelKopfdatumConstants.MESSAGE_KEY_GEBIET_ID_EINZAHL),
        gebietNummerFormatter.getDarstellung(entity.getGebiet())));

    if (entity.getGruppe() != null) {
      formBuilder.addProperty(new ReadOnlyStringProperty(getMessage(StimmzettelKopfdatumConstants.MESSAGE_KEY_GRUPPE_ID_EINZAHL),
          entity.getGruppe().getName()));
    }

    formBuilder.addProperty(entity.getProperties().getWertProperty());
  }

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

