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

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

import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.system.boundary.SystemLogWriter;
import de.ivu.elect.business.system.control.files.FileCleanupEvent;
import de.ivu.elect.business.system.entity.SystemLogQuelle;
import de.ivu.elect.business.wahl.boundary.WahlDAO;
import de.ivu.elect.business.wahl.boundary.WahlterminDAO;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.protokollierung.ProtokollThreadLocal;

@Stateless
public class MandantEdit extends AbstractMandantEdit {

  @Inject
  private transient WahlDAO wahlDAO;

  @Inject
  private transient WahlterminDAO wahlterminDAO;

  @Inject
  private transient FileCleanupEvent fileCleanupEvent;

  @Inject
  private transient SystemLogWriter systemLogWriter;

  @Inject
  private transient Messages messages;

  @Override
  public void delete(Mandant entityNotAttched) {
    for (Wahltermin wahltermin : wahlterminDAO.findByAll(entityNotAttched)) {
      for (Wahl wahl : wahlDAO.findByWahltermin(wahltermin)) {
        wahlDAO.remove(wahl);
      }
      wahlterminDAO.remove(wahltermin);
    }

    Mandant attachedEntity = getAttachedEntity(entityNotAttched);

    systemLogWriter.writeInfoLogMessageFuerSystemMandant(messages
            .getMessageForMessageKey("loesch.protokoll.mandant", ProtokollThreadLocal.getBenutzerKennung(), attachedEntity.getNummer(), attachedEntity.getName()),
        SystemLogQuelle.GELOESCHT);


    super.delete(entityNotAttched);
    fileCleanupEvent.sendEvent();
  }

}
