
package de.ivu.elect.exchange.wahl.mapper;

import static java.util.Collections.emptyList;
import static org.apache.commons.lang3.StringUtils.isNotBlank;

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

import de.ivu.elect.business.praesentation.entity.PraesentationUploadServiceStatus;
import de.ivu.elect.business.wahl.entity.WahlParameter;
import de.ivu.elect.business.wahl.entity.WahlParameterWerte;

public class WahlParameterMapper {

  public WahlParameterMapper() {
    super();
  }

  public Collection<WahlParameter> intern(Collection<de.ivu.elect.interfaces.core.WahlParameter> sources) {
    if (sources == null || sources.isEmpty()) {
      return emptyList();
    }

    List<WahlParameter> targets = new ArrayList<>();

    for (de.ivu.elect.interfaces.core.WahlParameter source : sources) {
      WahlParameter target = new WahlParameter();
      target.setSchluessel(source.getKey());
      target.setWert(source.getValue());

      targets.add(target);
    }

    return targets;
  }

  public Collection<de.ivu.elect.interfaces.core.WahlParameter> extern(Collection<WahlParameter> sources) {
    if (sources == null || sources.isEmpty()) {
      return emptyList();
    }

    List<de.ivu.elect.interfaces.core.WahlParameter> targets = new ArrayList<>();

    for (WahlParameter source : sources) {
      de.ivu.elect.interfaces.core.WahlParameter target = new de.ivu.elect.interfaces.core.WahlParameter();
      target.setKey(source.getKey());
      target.setValue(source.getWert());

      if (isNotBlank(target.getValue())) {
        source.getTemplate().ifPresent(wahlParameterWerte -> resetExternWahlParameterWerte(wahlParameterWerte, target));
      }

      targets.add(target);
    }

    return targets;
  }

  protected void resetExternWahlParameterWerte(WahlParameterWerte wahlParameterWerte, de.ivu.elect.interfaces.core.WahlParameter target) {
    if (wahlParameterWerte.getWertTyp().expectsWertIsSecret()) { // ELECT-8878 Passwörter nicht exportieren
      target.setValue("");
    }

    if (WahlParameterWerte.PREASENTATIION_UPLOAD_SERVICE_STATUS.equals(wahlParameterWerte)) { // ELECT-9372
      target.setValue(PraesentationUploadServiceStatus.DEAKTIVIERT.name());
    }
  }
}
