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

import java.io.InputStream;

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

import de.ivu.elect.business.datei.entity.DateiImportBerichtCustomData;
import de.ivu.elect.business.exchange.control.AbstractImporter;
import de.ivu.elect.business.exchange.control.FileKonfiguration;
import de.ivu.elect.business.exchange.control.ImportExchange;
import de.ivu.elect.business.exchange.control.MappingException;
import de.ivu.elect.business.exchange.entity.ImportUpdateReport;
import de.ivu.elect.business.stimmzettel.control.WesStimmzettelImportExchange;
import de.ivu.elect.business.stimmzettel.entity.Stimmzettel;
import de.ivu.elect.business.stimmzettel.entity.StimmzettelKopfdatum;
import de.ivu.elect.business.stimmzettel.entity.StimmzettelMeta;
import de.ivu.elect.business.stimmzettel.entity.WesStimmzettelDaten;
import de.ivu.elect.business.stimmzettel.entity.WesStimmzettelImportContext;
import de.ivu.elect.jee.entity.Meta;
import de.ivu.elect.jee.exchange.ImportOptions;
import de.ivu.elect.jee.exchange.Violations;

@Stateless
public class WesStimmzettelImporter extends AbstractImporter<WesStimmzettelDaten, WesStimmzettelImportContext, DateiImportBerichtCustomData> {

  @Inject
  private transient WesStimmzettelImportExchange wesStimmzettelImportExchange;

  @Inject
  private transient StimmzettelMeta stimmzettelMeta;

  @Override
  protected void validiere(Violations violations, WesStimmzettelDaten wesStimmzettelDaten, WesStimmzettelImportContext wesStimmzettelImportContext, ImportOptions importOptions) {

    for (Stimmzettel stimmzettel : wesStimmzettelDaten.getStimmzettelList()) {
      validateEntity(stimmzettel);
    }

    for (StimmzettelKopfdatum stimmzettelKopfdatum : wesStimmzettelDaten.getStimmzettelKopfdaten()) {
      validateEntity(stimmzettelKopfdatum);
    }


  }

  @Override
  protected void erstelleBericht(WesStimmzettelDaten wesStimmzettelDaten, WesStimmzettelImportContext wesStimmzettelImportContext, ImportOptions importOptions, StringBuilder bericht, boolean vorab) {
    // nichts zu tun
  }

  @Override
  protected ImportUpdateReport createImportUpdateReport(WesStimmzettelDaten wesStimmzettelDaten, Violations violations, WesStimmzettelImportContext wesStimmzettelImportContext, ImportOptions importOptions, StringBuilder bericht) {
    return new ImportUpdateReport(violations, wesStimmzettelDaten.getStimmzettelKopfdaten().size()+wesStimmzettelDaten.getStimmzettelList().size(), 0, 0, importOptions, bericht);
  }

  @Override
  protected void anlegenWennNichtVorhanden(WesStimmzettelDaten wesStimmzettelDaten, WesStimmzettelImportContext wesStimmzettelImportContext, DateiImportBerichtCustomData customDateiImportBericht, StringBuilder bericht) {

  }

  @Override
  protected void aktualisiereBestehendenDaten(WesStimmzettelDaten wesStimmzettelDaten, WesStimmzettelImportContext wesStimmzettelImportContext, DateiImportBerichtCustomData customDateiImportBericht, StringBuilder bericht) {
    // nicht unterstuetzt
  }

  @Override
  protected void loescheBestehendenDatenWennNichtInImportDatenVorhanden(WesStimmzettelDaten wesStimmzettelDaten, WesStimmzettelImportContext wesStimmzettelImportContext, DateiImportBerichtCustomData customDateiImportBericht, StringBuilder bericht) {

  }

  @Override
  protected ImportExchange<WesStimmzettelDaten, WesStimmzettelImportContext> getExchange() {
    return wesStimmzettelImportExchange;
  }

  @Override
  protected Meta getMetaForEntityInternal() {
    return stimmzettelMeta;
  }

  @Override
  public WesStimmzettelDaten readImportObject(WesStimmzettelImportContext wesStimmzettelImportContext, InputStream inputStream, FileKonfiguration fileKonfiguration) throws MappingException {
    return super.readImportObject(wesStimmzettelImportContext, inputStream, fileKonfiguration);
  }
}
