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

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;

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

import de.ivu.elect.business.aufgabe.entity.Aufgabe;
import de.ivu.elect.business.aufgabe.entity.AufgabeMeta;
import de.ivu.elect.business.aufgabe.entity.AufgabeTK;
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.jee.entity.Meta;
import de.ivu.elect.jee.exchange.ImportOptions;
import de.ivu.elect.jee.exchange.Violations;

@Stateless
public class AufgabeImporterPlaceholder extends AbstractEntityImporter<Aufgabe, AufgabeTK, AufgabeExchangeContext, DateiImportBerichtCustomData> {

  @Override
  public void importiereImportObject(List<Aufgabe> inDatei, AufgabeExchangeContext aufgabeExchangeContext, ImportOptions importOptions,
                                     DateiImportBerichtCustomData dateiImportBerichtCustomData, StringBuilder bericht) {
    super.importiereImportObject(inDatei, aufgabeExchangeContext, importOptions, dateiImportBerichtCustomData, bericht);
  }

  @Inject
  private transient AufgabeMeta meta;

  @Override
  protected void persistiere(Collection<Aufgabe> neueEntities, AufgabeExchangeContext aufgabeExchangeContext, DateiImportBerichtCustomData dateiImportBerichtCustomData, StringBuilder bericht) {
    // NO OP
  }

  @Override
  protected void aktualisiere(Aufgabe entityInDatei, Aufgabe entityInDatenbank, AufgabeExchangeContext aufgabeExchangeContext, DateiImportBerichtCustomData dateiImportBerichtCustomData, StringBuilder bericht) {
    // NO OP
  }

  @Override
  protected void loescheAusDatenbank(Collection<Aufgabe> entitiesInDb, AufgabeExchangeContext aufgabeExchangeContext, DateiImportBerichtCustomData dateiImportBerichtCustomData, StringBuilder bericht) {
// NO OP
  }

  @Override
  protected List<Aufgabe> getAllEntitiesInDB(AufgabeExchangeContext aufgabeExchangeContext) {
    return Collections.emptyList();
  }

  @Override
  protected Function<Aufgabe, AufgabeTK> getEntityToEntityTKFunction() {
    return Aufgabe::getAufgabeTK;
  }

  @Override
  public void validiere(Violations violations, List<Aufgabe> aufgabes, AufgabeExchangeContext aufgabeExchangeContext, ImportOptions importOptions) {
// NO OP
  }

  @Override
  protected void erstelleBericht(List<Aufgabe> aufgabes, AufgabeExchangeContext aufgabeExchangeContext, ImportOptions importOptions, StringBuilder bericht, boolean vorab) {
// NO OP
  }

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

  @Nullable
  @Override
  protected ImportExchange<List<Aufgabe>, AufgabeExchangeContext> getExchange() {
    return null;
  }
}
