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

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

import de.ivu.elect.business.datei.entity.DateiImport;
import de.ivu.elect.business.gebietsbaum.boundary.GebietImportAktualisierenArt;
import de.ivu.elect.business.gebietsbaum.boundary.GebietsbaumImporter;
import de.ivu.elect.business.gebietsbaum.control.Gebietsbaum;
import de.ivu.elect.business.gebietsbaum.control.GebietsbaumExchangeContext;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.redirect.Redirect;
import de.ivu.elect.presentation.View;
import de.ivu.elect.presentation.exchange.AbstractImportBestaetigenView;
import de.ivu.elect.presentation.exchange.ImportDescription;
import de.ivu.elect.presentation.gebietsbaum.SetzeWurzelgebietSelectChangeListener;

@Named(GebietImportBestaetigenView.COMPONENT_NAME)
@View(viewId = GebietImportBestaetigenView.VIEW_ID, useCase = UseCasePermission.GEBIET_IMPORTIEREN)
public class GebietImportBestaetigenView extends AbstractImportBestaetigenView<Gebietsbaum, GebietsbaumExchangeContext> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "gebietImportBestaetigenView";

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

  @Inject
  private transient GebietImportBestaetigenViewFormBuilder gebietImportBestaetigenViewFormBuilder;

  @Inject
  private transient GebietsbaumImporter gebietsbaumImporter;

  @Inject
  private transient GebietImportDescription gebietImportDescription;

  @Inject
  private transient SetzeWurzelgebietSelectChangeListener setzeWurzelgebietWahlSelectChangeListener;

  private GebietsbaumExchangeContext context = null;

  public GebietImportBestaetigenView() {
    super();
  }

  @Override
  protected void addProperties(FormBuilder formBuilder, DateiImport dateiImport, GebietsbaumExchangeContext context) {
    getImportReport(); // HINT: Import-Vorschau einmal erzeugen, um den Filter zu befüllen

    gebietImportBestaetigenViewFormBuilder.addProperties(formBuilder, context);

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

  @Override
  protected GebietsbaumExchangeContext getContext() {
    if (context == null) {
      context = new GebietsbaumExchangeContext(getSelectedWahltermin(), getSelectedWahl(), getSelectedGebietImportAktualisierenArt());
    }

    return context;
  }

  private GebietImportAktualisierenArt getSelectedGebietImportAktualisierenArt() {
    if (isEntitySelected()) {
      return getImporter().getSupportedGebietImportAktualisierenArt(getSelectedEntity().getDatei().getFileFormat());
    }

    return GebietImportAktualisierenArt.NICHTS_AKTUALISIEREN;
  }

  @Override
  public boolean isBtnImportierenDisabled() {
    return gebietImportBestaetigenViewFormBuilder.isBtnImportierenDisabled() || super.isBtnImportierenDisabled();
  }

  @Override
  @Redirect
  public String importieren() {
    String result = super.importieren();

    if (setzeWurzelgebietWahlSelectChangeListener.isBetrachteWahltermin()) {
      setzeWurzelgebietWahlSelectChangeListener.setzeWurzelgebiet(getSelectedWahltermin());
    }

    if (setzeWurzelgebietWahlSelectChangeListener.isBetrachteWahl()) {
      setzeWurzelgebietWahlSelectChangeListener.setzeWurzelgebiet(getSelectedWahl());
    }

    return result;
  }

  @Override
  protected GebietsbaumImporter getImporter() {
    return gebietsbaumImporter;
  }

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