package de.ivu.elect.business.wahl.boundary;

import de.ivu.elect.business.CurrentCustomer;
import de.ivu.elect.business.datei.entity.DateiImport;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.wahl.control.Wahldaten;
import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlImportContext;
import de.ivu.elect.business.wahl.entity.Wahlart;
import de.ivu.elect.business.wahl.entity.WahlartSitzberechnungsalgorithmus;
import de.ivu.elect.business.wahl.entity.Wahldurchfuehrung;
import de.ivu.elect.jee.exchange.ImportOptions;

import javax.annotation.Nullable;
import javax.ejb.Stateless;
import javax.enterprise.inject.Specializes;
import javax.inject.Inject;
import java.util.List;

@Stateless
@Specializes
public class NlWasWahlImporter extends WasWahlImporter {

  @Inject
  private transient NlWahlImportHelper nlWahlImportHelper;

  @Inject
  private transient CurrentCustomer currentCustomer;

  @Nullable
  @Override
  protected Wahlart findeWahlartInDb(Wahlart wahlart, WahlImportContext context) {
   return nlWahlImportHelper.findeWahlartInDb(wahlart, context);
  }

  @Override
  protected void preImportActions(DateiImport dateiImport, WahlImportContext wahlImportContext, ImportOptions importOptions) {
    super.preImportActions(dateiImport, wahlImportContext, importOptions);
    wahlImportContext.put("Eml110Filename", dateiImport.getDatei().getOriginalDateiname());//ELECT-10358
  }

  @Override
  protected void updateWahlBeforePersist(WahlImportContext context, Wahl wahl) {
    nlWahlImportHelper.updateWahlBeforePersist(context, wahl);
    super.updateWahlBeforePersist(context, wahl);
  }

  @Override
  protected void postCreateGebiete(List<Gebiet> gebiete) {
    super.postCreateGebiete(gebiete);
    nlWahlImportHelper.postCreateGebiete(gebiete);
  }

  @Override
  protected List<Gebiet> filterZuImportierendeGebiete(Wahldaten<Wahl, Gebiet> wahldaten, Wahlart wahlartInDb) {
    return nlWahlImportHelper.filterZuImportierendeGebiete(wahldaten, wahlartInDb);
  }

  @Override
  protected boolean isPersistiereGruppeImGebiet(GruppeImGebiet gruppeImGebiet) {
    return super.isPersistiereGruppeImGebiet(gruppeImGebiet) && gruppeImGebiet.getGebiet().isPersistent() /*ELECT-9931*/;
  }

  @Override
  protected void postCreateWahl(Wahl wahl, WahlImportContext wahlImportContext) {
    if (!NlWahlart.isWasCSB(wahl, currentCustomer.getCustomer())) {
      wahl.castTo(Wahldurchfuehrung.class).getEntity().setSitzberechnungsalgorithmus(WahlartSitzberechnungsalgorithmus.KEIN); // nur im CSB
    }
  }

  @Override
  protected boolean isLoggeVeraenderteWahlparameter() {
    return false; // ELECT-11334
  }
}
