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

import java.io.Serializable;

import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.ivu.elect.business.WahlOderWahlterminApp;
import de.ivu.elect.business.gebietsbaum.entity.PruefzifferAutomatischGenerierenFormat;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlParameterLoader;
import de.ivu.elect.business.wahl.entity.WahlParameterWerte;
import de.ivu.elect.business.wahl.entity.Wahltermin;

public class PruefkennzeichenAutomatischGenerierenHelper implements Serializable {
  private static final long serialVersionUID = 1L;

  private static final Logger LOG = LoggerFactory.getLogger(PruefkennzeichenAutomatischGenerierenHelper.class);

  @Inject
  private transient WahlParameterLoader wahlParameterLoader;

  @Inject
  private transient WahlOderWahlterminApp wahlOderWahlterminApp;

  @Inject
  private transient PruefkennzeichenAutomatischGenerierenSingleton pruefkennzeichenAutomatischGenerierenSingleton;

  public void generiere(Wahltermin wahltermin) {

    PruefzifferAutomatischGenerierenFormat result = null;
    if (wahlOderWahlterminApp.isWahlterminApp()) {
      result = wahlParameterLoader
          .resolveEnumValue(wahltermin, WahlParameterWerte.WES_PRUEFZIFFER_FORMAT_AUTOMATISCHE_GENERIERUNG, PruefzifferAutomatischGenerierenFormat.class);

    } else {
      for (Wahl wahl : wahltermin.getWahlsByWahltermin()) {
        PruefzifferAutomatischGenerierenFormat pruefzifferAutomatischGenerierenFormat = wahlParameterLoader
            .resolveEnumValue(wahl, WahlParameterWerte.WES_PRUEFZIFFER_FORMAT_AUTOMATISCHE_GENERIERUNG, PruefzifferAutomatischGenerierenFormat.class);

        if (result == null) {
          result = pruefzifferAutomatischGenerierenFormat;
        } else {
          result = result.kombiniere(pruefzifferAutomatischGenerierenFormat);
        }

      }
    }
    if (result != null && !result.isDeaktiviert()) {
      pruefkennzeichenAutomatischGenerierenSingleton.generiere(wahltermin, result);
    }
  }

}
