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

import static org.apache.commons.lang3.StringUtils.isNotBlank;

import de.ivu.elect.business.stimmeingabe.control.plausi.StimmeingabePlausiResult;
import de.ivu.elect.business.stimmeingabe.entity.Stimmeingabefehler;

public class StimmeingabefehlerFactory {

  public StimmeingabefehlerFactory() {
    super();
  }

  public Stimmeingabefehler fromStimmeingabePlausiResult(StimmeingabePlausiResult stimmeingabePlausiResult) {
    Stimmeingabefehler stimmeingabefehler = new Stimmeingabefehler();
    stimmeingabefehler.setStimmeingabe(stimmeingabePlausiResult.getStimmeingabe());
    stimmeingabefehler.setStimmeingabePlausiTyp(stimmeingabePlausiResult.getStimmeingabePlausiTyp());

    stimmeingabefehler.setFehlerart(stimmeingabePlausiResult.getStimmeingabefehlerFehlerart());
    stimmeingabefehler.setBeschreibung(formatBeschreibung(stimmeingabePlausiResult));
    stimmeingabefehler.setErwarteteAnzahlEingabe(stimmeingabePlausiResult.getAnzahlSollEingabe());

    return stimmeingabefehler;

  }

  private String formatBeschreibung(StimmeingabePlausiResult plausiResult) {
    StringBuilder result = new StringBuilder();

    String fehlerschluessel = extractFehlerschluessel(plausiResult);

    if (isNotBlank(fehlerschluessel)) {
      result.append(fehlerschluessel).append(": ");
    }

    result.append(extractFehlerbeschreibung(plausiResult));

    return result.toString();
  }

  protected String extractFehlerschluessel(StimmeingabePlausiResult plausiResult) {
    return plausiResult.getStimmeingabefehlerFehlerschluessel();
  }

  protected String extractFehlerbeschreibung(StimmeingabePlausiResult plausiResult) {
    return plausiResult.getStimmeingabefehlerBeschreibung();
  }
}
