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

import java.util.Collection;
import java.util.List;

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

import java.util.function.Function;
import de.ivu.elect.business.datei.entity.DateiImportBerichtCustomData;
import de.ivu.elect.business.exchange.control.AbstractEntityImporter;
import de.ivu.elect.business.exchange.control.ImportExchange;
import de.ivu.elect.business.exchange.control.NoContext;
import de.ivu.elect.jee.exchange.Violations;
import de.ivu.elect.business.lokalisierung.control.LokalisierungImportExchange;
import de.ivu.elect.business.lokalisierung.entity.Lokalisierung;
import de.ivu.elect.business.lokalisierung.entity.LokalisierungMeta;
import de.ivu.elect.business.lokalisierung.entity.LokalisierungTK;
import de.ivu.elect.jee.entity.Meta;
import de.ivu.elect.jee.exchange.ImportOptions;

@Stateless
public class LokalisierungImporter extends AbstractEntityImporter<Lokalisierung, LokalisierungTK, NoContext, DateiImportBerichtCustomData> {

  @Inject
  LokalisierungMeta lokalisierungMeta;

  @Inject
  LokalisierungImportExchange lokalisierungImportExchange;

  @Inject
  LokalisierungDAO lokalisierungDAO;

  @Override
  protected void validiere(Violations violations, List<Lokalisierung> lokalisierungs, NoContext noContext, ImportOptions importOptions) {
// nichts zu tun
  }

  @Override
  protected void erstelleBericht(List<Lokalisierung> lokalisierungs, NoContext noContext, ImportOptions importOptions, StringBuilder bericht, boolean vorab) {
// nichts zu tun
  }

  @Override
  protected ImportExchange<List<Lokalisierung>, NoContext> getExchange() {
    return lokalisierungImportExchange;
  }

  @Override
  public Meta getMetaForEntityInternal() {
    return lokalisierungMeta;
  }

  @Override
  protected void persistiere(Collection<Lokalisierung> neueEntities, NoContext noContext, DateiImportBerichtCustomData dateiImportBerichtCustomData, StringBuilder bericht) {
    throw new UnsupportedOperationException();
  }

  @Override
  protected void aktualisiere(Lokalisierung entityInDatei, Lokalisierung entityInDatenbank, NoContext noContext, DateiImportBerichtCustomData dateiImportBerichtCustomData, StringBuilder bericht) {
    entityInDatenbank.setWertGeaendert(entityInDatei.getWertGeaendert());
  }

  @Override
  protected void loescheAusDatenbank(Collection<Lokalisierung> entitiesInDb, NoContext noContext, DateiImportBerichtCustomData dateiImportBerichtCustomData, StringBuilder bericht) {
    throw new UnsupportedOperationException();
  }

  @Override
  protected List<Lokalisierung> getAllEntitiesInDB(NoContext noContext) {
    return lokalisierungDAO.findByAll();
  }

  @Override
  protected Function<Lokalisierung, LokalisierungTK> getEntityToEntityTKFunction() {
    return LokalisierungTK.getLokalisierungToTKFunction();
  }
}
