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

import java.io.Serializable;

import javax.ejb.Stateless;
import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.ivu.elect.business.datei.entity.FileType;
import de.ivu.elect.business.exchange.control.FileFormat;
import de.ivu.elect.business.exchange.control.InputStreamDatenCreator;
import de.ivu.elect.business.exchange.entity.DateiImportArt;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.wahl.boundary.WahlKonfigurationImporter;
import de.ivu.elect.business.wahl.boundary.WahlkonfigurationAnpassbar;
import de.ivu.elect.business.wahl.entity.WahlKonfigurationExchangeContext;
import de.ivu.elect.jee.exchange.ImportOptions;

@Stateless
public class WahlkonfigurationInitialerImport implements Serializable {

  public static final String DEFAULT_WAHLKONFIGURATION_RESOURCE = "wahlkonfiguration.xml";

  private static final Logger LOG = LoggerFactory.getLogger(WahlkonfigurationInitialerImport.class);

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlkonfigurationAnpassbar wahlkonfigurationAnpassbar;

  @Inject
  private transient WahlKonfigurationImporter wahlKonfigurationImporter;

  @Inject
  private transient InputStreamDatenCreator inputStreamDatenCreator;

  public void importiereWahlkonfigurationWennVorhanden(Mandant mandant) {
    if (mandant.getArt().isCustomerMandant()) {
      if (wahlkonfigurationAnpassbar.isWahlkonfigurationBeimStartAktualisieren(mandant)) {
        LOG.info("Aktualisiere Wahlkonfiguration für Mandant: " + mandant);
        try (var is = Thread.currentThread().getContextClassLoader().getResourceAsStream(DEFAULT_WAHLKONFIGURATION_RESOURCE)) {
          if (is != null) {
            LOG.info("Wahlkonfiguration gefunden - importiere");
            var context = new WahlKonfigurationExchangeContext(mandant);
            inputStreamDatenCreator.importiere(wahlKonfigurationImporter, is, new FileFormat(WahlKonfigurationImporter.FILE_FORMAT_DEFAULT, FileType.XML),
                DateiImportArt.WAHL_KONFIGURATION_IMPORT, mandant, null, context, ImportOptions.IMPORT_VOLLSTAENDIG_UEBERNEHMEN /*ELECTKOM-621*/);
            LOG.info("Wahlkonfiguration gefunden - importiere - done");
          } else {
            LOG.warn("Wahlkonfiguration nicht gefunden: " + DEFAULT_WAHLKONFIGURATION_RESOURCE);
          }
        } catch (Exception e) {
          LOG.warn("Fehler beim Laden/Importieren von " + DEFAULT_WAHLKONFIGURATION_RESOURCE + ", " + e.getMessage(), e);
        }
      }
    }
  }
}
