
package de.ivu.elect.business.stimmeingabe.boundary.plausi;

import static java.util.Collections.emptyList;

import java.util.List;

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

import de.ivu.elect.business.mandant.boundary.MandantDAO;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiKonfiguration;
import de.ivu.elect.business.system.boundary.SystemLogWriter;
import de.ivu.elect.business.system.entity.SystemLogQuelle;
import de.ivu.elect.business.wahl.boundary.WahlDAO;
import de.ivu.elect.business.wahl.entity.Wahl;

@Stateless
public class DefaultStimmeingabePlausiKonfigurationCreator {

  @Inject
  private transient WahlDAO wahlDAO;

  @Inject
  private transient MandantDAO mandantDAO;

  @Inject
  private transient SystemLogWriter systemLogWriter;

  public DefaultStimmeingabePlausiKonfigurationCreator() {
    super();
  }

  public void initDefaultStimmeingabePlausiKonfigurationenAlleMandanten() {
    for (Mandant mandant : mandantDAO.findByAll()) {
      if (mandant.getArt().isCustomerMandant()) {
        initDefaultStimmeingabePlausiKonfigurationen(mandant);
      }
    }
  }

  private void initDefaultStimmeingabePlausiKonfigurationen(Mandant mandant) {
    if (mandant.getArt().isCustomerMandant()) {
      StringBuilder sb = new StringBuilder("Neue Plausi-Konfigurationen verfügbar für: ");

      boolean neuePlausisAngelegt = false;

      for (Wahl wahl : wahlDAO.findByAll(mandant)) {
        List<StimmeingabePlausiKonfiguration> neuePlausiKonfigurationen = initDefaultStimmeingabePlausiKonfigurationen(wahl);

        if (neuePlausiKonfigurationen.size() > 0) {
          if (neuePlausisAngelegt) {
            sb.append(", ");
          } else {
            neuePlausisAngelegt = true;
          }

          sb.append(wahl.getName());
        }
      }

      if (neuePlausisAngelegt) {
        systemLogWriter.writeInfoLogMessageFuerMandant(mandant, sb.toString(), SystemLogQuelle.KONFIGURATION);
      }
    }
  }

  /**
   * @param wahl
   *
   * @return neu angelegte Plausi-Konfigurationen
   */
  public List<StimmeingabePlausiKonfiguration> initDefaultStimmeingabePlausiKonfigurationen(Wahl wahl) {
    // Nur im WAS (siehe WasDefaultStimmeingabePlausiKonfigurationCreator)
    return emptyList();
  }
}
