package de.ivu.elect.was.exchange.stimmeingabe;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.stimmeingabe.boundary.StimmeingabePlausiKonfigurationFactory;
import de.ivu.elect.business.stimmeingabe.control.StimmeingabePlausiKonfigurationImportContext;
import de.ivu.elect.business.stimmeingabe.entity.*;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiKonfigurationen;

public class StimmeingabePlausiKonfigurationMapper implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient StimmeingabePlausiKonfigurationFactory stimmeingabePlausiKonfigurationFactory;

  @Inject
  private transient StimmeingabePlausiMapper stimmeingabePlausiMapper;

  public List<StimmeingabePlausiKonfiguration> mappe(StimmeingabePlausiKonfigurationen stimmeingabePlausiKonfigurationenExtern, Wahl wahl) {
    List<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationenIntern = new ArrayList<>();
    if (stimmeingabePlausiKonfigurationenExtern != null && stimmeingabePlausiKonfigurationenExtern.getStimmeingabePlausiKonfigurationen() != null) {
      for (de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiKonfiguration stimmeingabePlausiKonfigurationExtern : stimmeingabePlausiKonfigurationenExtern.getStimmeingabePlausiKonfigurationen()) {
        StimmeingabePlausiKonfiguration stimmeingabePlausiKonfigurationIntern = mappe(stimmeingabePlausiKonfigurationExtern);
        stimmeingabePlausiKonfigurationIntern.setWahl(wahl);
        stimmeingabePlausiKonfigurationenIntern.add(stimmeingabePlausiKonfigurationIntern);
      }
    }
    return stimmeingabePlausiKonfigurationenIntern;
  }

  public StimmeingabePlausiKonfiguration mappe(de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiKonfiguration stimmeingabePlausiKonfigurationExtern) {
    StimmeingabePlausiKonfiguration stimmeingabePlausiKonfigurationIntern = stimmeingabePlausiKonfigurationFactory.create();
    stimmeingabePlausiKonfigurationIntern.setTyp(stimmeingabePlausiMapper.mappe(stimmeingabePlausiKonfigurationExtern.getTyp()));
    stimmeingabePlausiKonfigurationIntern.setErgebniseingangsart(mappe(stimmeingabePlausiKonfigurationExtern.getErgebniseingangsart()));
    stimmeingabePlausiKonfigurationIntern.setGebietsart(mappe(stimmeingabePlausiKonfigurationExtern.getGebietsart()));
    stimmeingabePlausiKonfigurationIntern.setFehlerart(mappe(stimmeingabePlausiKonfigurationExtern.getFehlerart()));
    stimmeingabePlausiKonfigurationIntern.setBeschreibung(stimmeingabePlausiKonfigurationExtern.getBeschreibung());
    stimmeingabePlausiKonfigurationIntern.setFehlermeldungFormat(stimmeingabePlausiKonfigurationExtern.getFehlermeldungFormat());
    stimmeingabePlausiKonfigurationIntern.setFehlerschluessel(stimmeingabePlausiKonfigurationExtern.getFehlerschluessel());
    stimmeingabePlausiKonfigurationIntern.setStatus(mappe(stimmeingabePlausiKonfigurationExtern.getStatus()));
    stimmeingabePlausiKonfigurationIntern.setCustomDataXml(stimmeingabePlausiKonfigurationExtern.getCustomData());
    return stimmeingabePlausiKonfigurationIntern;
  }

  public StimmeingabePlausiKonfigurationen mappe(List<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationenIntern) {
    if (stimmeingabePlausiKonfigurationenIntern == null || stimmeingabePlausiKonfigurationenIntern.isEmpty()) {
      return null;
    }
    List<de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationenExtern = new ArrayList<>();
    for (StimmeingabePlausiKonfiguration stimmeingabePlausiKonfigurationIntern : stimmeingabePlausiKonfigurationenIntern) {
      stimmeingabePlausiKonfigurationenExtern.add(mappe(stimmeingabePlausiKonfigurationIntern));
    }
    StimmeingabePlausiKonfigurationen stimmeingabePlausiKonfigurationen = new StimmeingabePlausiKonfigurationen();
    stimmeingabePlausiKonfigurationen.setStimmeingabePlausiKonfigurationen(stimmeingabePlausiKonfigurationenExtern);
    return stimmeingabePlausiKonfigurationen;
  }

  public de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiKonfiguration mappe(StimmeingabePlausiKonfiguration stimmeingabePlausiKonfigurationIntern) {
    de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiKonfiguration stimmeingabePlausiKonfigurationExtern = new de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiKonfiguration();
    stimmeingabePlausiKonfigurationExtern.setTyp(stimmeingabePlausiMapper.mappe(stimmeingabePlausiKonfigurationIntern.getTyp()));
    stimmeingabePlausiKonfigurationExtern.setErgebniseingangsart(mappe(stimmeingabePlausiKonfigurationIntern.getErgebniseingangsart()));
    stimmeingabePlausiKonfigurationExtern.setGebietsart(mappe(stimmeingabePlausiKonfigurationIntern.getGebietsart()));
    stimmeingabePlausiKonfigurationExtern.setFehlerart(mappe(stimmeingabePlausiKonfigurationIntern.getFehlerart()));
    stimmeingabePlausiKonfigurationExtern.setBeschreibung(stimmeingabePlausiKonfigurationIntern.getBeschreibung());
    stimmeingabePlausiKonfigurationExtern.setFehlermeldungFormat(stimmeingabePlausiKonfigurationIntern.getFehlermeldungFormat());
    stimmeingabePlausiKonfigurationExtern.setFehlerschluessel(stimmeingabePlausiKonfigurationIntern.getFehlerschluessel());
    stimmeingabePlausiKonfigurationExtern.setStatus(mappe(stimmeingabePlausiKonfigurationIntern.getStatus()));
    stimmeingabePlausiKonfigurationExtern.setCustomData(stimmeingabePlausiKonfigurationIntern.getCustomDataXml());
    return stimmeingabePlausiKonfigurationExtern;
  }

  private StimmeingabePlausiErgebniseingangsart mappe(de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiErgebniseingangsart stimmeingabePlausiErgebniseingangsart) {
    return StimmeingabePlausiErgebniseingangsart.valueOf(stimmeingabePlausiErgebniseingangsart.name());
  }

  private de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiErgebniseingangsart mappe(StimmeingabePlausiErgebniseingangsart stimmeingabePlausiErgebniseingangsart) {
    return de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiErgebniseingangsart.valueOf(stimmeingabePlausiErgebniseingangsart.name());
  }

  private StimmeingabePlausiGebietsart mappe(de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiGebietsart stimmeingabePlausiGebietsart) {
    return StimmeingabePlausiGebietsart.valueOf(stimmeingabePlausiGebietsart.name());
  }

  private de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiGebietsart mappe(StimmeingabePlausiGebietsart stimmeingabePlausiGebietsart) {
    return de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiGebietsart.valueOf(stimmeingabePlausiGebietsart.name());
  }

  private StimmeingabePlausiFehlerart mappe(de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiFehlerart stimmeingabePlausiFehlerart) {
    return StimmeingabePlausiFehlerart.valueOf(stimmeingabePlausiFehlerart.name());
  }

  private de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiFehlerart mappe(StimmeingabePlausiFehlerart stimmeingabePlausiFehlerart) {
    return de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiFehlerart.valueOf(stimmeingabePlausiFehlerart.name());
  }

  private StimmeingabePlausiStatus mappe(de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiStatus stimmeingabePlausiStatus) {
    return StimmeingabePlausiStatus.valueOf(stimmeingabePlausiStatus.name());
  }

  private de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiStatus mappe(StimmeingabePlausiStatus stimmeingabePlausiStatus) {
    return de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiStatus.valueOf(stimmeingabePlausiStatus.name());
  }
}
