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

import de.ivu.elect.business.datei.entity.DateiImport;
import de.ivu.elect.business.exchange.control.AbstractImporter;
import de.ivu.elect.business.gebietsbaum.boundary.GebietSelectChangeEvent;
import de.ivu.elect.business.gebietsbaum.boundary.GebietSessionSelect;
import de.ivu.elect.business.kandidatur.boundary.WahlvorschlagImporter;
import de.ivu.elect.business.kandidatur.control.WahlvorschlagImportContext;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.View;
import de.ivu.elect.presentation.exchange.AbstractImportBestaetigenView;
import de.ivu.elect.presentation.exchange.ImportDescription;

import javax.enterprise.event.Observes;
import javax.enterprise.event.Reception;
import javax.inject.Inject;
import javax.inject.Named;
import java.util.List;

@Named(WahlvorschlagImportBestaetigenView.COMPONENT_NAME)
@View(viewId = WahlvorschlagImportBestaetigenView.VIEW_ID, useCase = UseCasePermission.WAHLVORSCHLAG_IMPORTIEREN)
public class WahlvorschlagImportBestaetigenView extends AbstractImportBestaetigenView<List<Wahlvorschlag>, WahlvorschlagImportContext> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "wahlvorschlagImportBestaetigenView";

  public static final String VIEW_ID = "/wahlvorschlag/wahlvorschlag-import-bestaetigen.xhtml";

  @Inject
  private transient WahlvorschlagImporter wahlvorschlagImporter;

  @Inject
  private transient WahlvorschlagImportDescription wahlvorschlagImportDescription;

  @Inject
  private transient WahlvorschlagImportViewFormBuilder wahlvorschlagImportViewFormBuilder;

  @Inject
  private transient GebietSessionSelect gebietSessionSelect;

  private WahlvorschlagImportContext context;

  public WahlvorschlagImportBestaetigenView() {
    super();
  }

  @Override
  public void addProperties(FormBuilder formBuilder, DateiImport dateiImport, WahlvorschlagImportContext context) {
    wahlvorschlagImportViewFormBuilder.addProperties(formBuilder, context);

    super.addProperties(formBuilder, dateiImport, context);
  }

  @Override
  protected WahlvorschlagImportContext getContext() {
    if (context == null) {
      context = wahlvorschlagImportViewFormBuilder.createContext(getSelectedWahl());
    }

    return context;
  }

  protected void resetContext() {
    context = null;
  }

  @Override
  protected ImportDescription getImportDescription() {
    return wahlvorschlagImportDescription;
  }

  @Override
  protected AbstractImporter<List<Wahlvorschlag>, WahlvorschlagImportContext, ? > getImporter() {
    return wahlvorschlagImporter;
  }

  public void onGebietSelectChangeEvent(@Observes(notifyObserver = Reception.IF_EXISTS) GebietSelectChangeEvent event) {
    if (isGebietsbaumAnzeigen()) {
      getContext().setSelectedGebiet(event.getNeueEntity());
      refresh();
    }
  }

  public String getPageTitle() {
    if (isGebietsbaumAnzeigen() && gebietSessionSelect.getEntity() != null) {
      return getMessage("wahlvorschlag.import.auf.gebiet.page.title", gebietSessionSelect.getEntity().getDarstellung());
    }
    return getMessage("wahlvorschlag.import.page.title");
  }

  public String getPageHeader() {
    if (isGebietsbaumAnzeigen() && gebietSessionSelect.getEntity() != null) {
      return getMessage("wahlvorschlag.import.auf.gebiet.page.header", gebietSessionSelect.getEntity().getDarstellung());
    }
    return getMessage("wahlvorschlag.import.page.header");
  }

  public boolean isGebietsbaumAnzeigen() {
    return false;
  }
}
