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

import java.util.Date;
import java.util.Set;

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,
                                               Set<Wahldurchfuehrungsgebiet> ergebniseingaengeGeloeschtPerWahldurchfuehrungsgebiet) {
    super.postErgebniseingaengeLoeschen(geloeschtDurch, geloeschtAm, ergebniseingaengeGeloeschtPerWahldurchfuehrungsgebiet);

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