
package de.ivu.elect.presentation.gruppeimgebiet.exchange;

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

import de.ivu.elect.business.exchange.control.AbstractExporter;
import de.ivu.elect.business.gruppeimgebiet.boundary.GruppeImGebietExporter;
import de.ivu.elect.business.gruppeimgebiet.control.GruppeImGebietEinzelkandidatenExportOption;
import de.ivu.elect.business.gruppeimgebiet.control.GruppeImGebietExchangeObject;
import de.ivu.elect.business.gruppeimgebiet.control.GruppeImGebietExportContext;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.presentation.View;
import de.ivu.elect.presentation.exchange.AbstractExportSearchView;
import de.ivu.elect.presentation.exchange.ExportDescription;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;
import de.ivu.elect.util.EnvironmentVariables;

@OnlineHilfeId("528")
@Named(GruppeImGebietExportSearchView.COMPONENT_NAME)
@View(viewId = GruppeImGebietExportSearchView.VIEW_ID, useCase = UseCasePermission.GRUPPE_IM_GEBIET_EXPORTIEREN)
public class GruppeImGebietExportSearchView extends AbstractExportSearchView<GruppeImGebietExchangeObject, GruppeImGebietExportContext> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "gruppeImGebietExportSearchView";

  public static final String VIEW_ID = "/gruppeimgebiet/gruppe-im-gebiet-export-search.xhtml";

  @Inject
  private transient GruppeImGebietExportDescription gruppeImGebietExportDescription;

  @Inject
  private transient GruppeImGebietExporter gruppeImGebietExporter;

  @Inject
  private transient EnvironmentVariables environmentVariables;

  private GruppeImGebietEinzelkandidatenExportOption gruppeImGebietEinzelkandidatenExportOption = GruppeImGebietEinzelkandidatenExportOption.NUR_AUF_DIREKTWAHLGEBIETEN_EXPORTIEREN;

  public GruppeImGebietExportSearchView() {
    super();
  }

  @Override
  public ExportDescription getExportDescription() {
    return gruppeImGebietExportDescription;
  }

  @Override
  protected AbstractExporter<GruppeImGebietExchangeObject, GruppeImGebietExportContext> getExporter() {
    return gruppeImGebietExporter;
  }

  public GruppeImGebietEinzelkandidatenExportOption getGruppeImGebietEinzelkandidatenExportOption() {
    return gruppeImGebietEinzelkandidatenExportOption;
  }

  public void setGruppeImGebietEinzelkandidatenExportOption(GruppeImGebietEinzelkandidatenExportOption gruppeImGebietEinzelkandidatenExportOption) {
    this.gruppeImGebietEinzelkandidatenExportOption = gruppeImGebietEinzelkandidatenExportOption;
  }

  public GruppeImGebietEinzelkandidatenExportOption[] getGruppeImGebietEinzelkandidatenExportOptionValues() {
    return GruppeImGebietEinzelkandidatenExportOption.values();
  }

  public boolean isInGruppeImGebietEinzelkandidatenExportOptionRendered() {
    return getSelectedWahl().isWahlMitDirektkandidatengebieten();
  }

  @Override
  protected GruppeImGebietExportContext getContext() {
    GruppeImGebietExportContext context = new GruppeImGebietExportContext(getSelectedWahl());

    context.setUrsprungsserver(environmentVariables.getServerName());
    context.setGruppeImGebietEinzelkandidatenExportOption(gruppeImGebietEinzelkandidatenExportOption);

    return context;
  }
}
