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

import java.util.Date;
import java.util.Map;
import java.util.Map.Entry;

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

import de.ivu.elect.business.gebietsbaum.control.NlWasGebietCustomDataErgebniseingangProtokoll;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingang;
import de.ivu.elect.business.stimmeingabe.entity.ErgebniseingangErfasser;
import de.ivu.elect.business.system.boundary.SystemLogWriter;
import de.ivu.elect.business.system.entity.SystemLogQuelle;
import de.ivu.elect.jee.faces.UserLocale;

@Stateless
@Specializes
public class NlStimmeingabeErfassungLoeschen extends StimmeingabeErfassungLoeschen {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient UserLocale userLocale;

  @Inject
  private transient SystemLogWriter systemLogWriter;

  public NlStimmeingabeErfassungLoeschen() {
    super();
  }

  @Override
  protected void preErgebniseingangLoeschen(ErgebniseingangErfasser geloeschtDurch, Date geloeschtAm, Ergebniseingang ergebniseingang) {
    // ELECTVAPP-387
    NlWasGebietCustomDataErgebniseingangProtokoll nlWasGebietCustomDataErgebniseingangProtokoll = new NlWasGebietCustomDataErgebniseingangProtokoll();
    nlWasGebietCustomDataErgebniseingangProtokoll.protokolliereErgebniseingang(ergebniseingang, geloeschtDurch, geloeschtAm,
        getMessage("nl.stimmeingaben.geloescht.protokoll", geloeschtDurch.getKennung(), userLocale.formatDateTime(geloeschtAm)));

    super.preErgebniseingangLoeschen(geloeschtDurch, geloeschtAm, ergebniseingang);
  }

  @Override
  protected void postErgebniseingaengeLoeschen(ErgebniseingangErfasser geloeschtDurch, Date geloeschtAm, Map<Wahldurchfuehrungsgebiet, Boolean> ergebniseingaengeGeloeschtPerWahldurchfuehrungsgebiet) {
    super.postErgebniseingaengeLoeschen(geloeschtDurch, geloeschtAm, ergebniseingaengeGeloeschtPerWahldurchfuehrungsgebiet);

    for (Entry<Wahldurchfuehrungsgebiet, Boolean> entry : ergebniseingaengeGeloeschtPerWahldurchfuehrungsgebiet.entrySet()) {
      if (Boolean.TRUE.equals(entry.getValue())) {
        Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet = entry.getKey();

        systemLogWriter.writeWarnLogMessageFuerMandant(wahldurchfuehrungsgebiet,
            getMessage("nl.stimmeingaben.geloescht.system.log", formatGebietDarstellung(wahldurchfuehrungsgebiet), geloeschtDurch.getKennung(), userLocale.formatDateTime(geloeschtAm)),
            SystemLogQuelle.SYSTEM);
      }
    }
  }
}
