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

import java.util.Collection;

import javax.inject.Inject;

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

import de.ivu.elect.business.mandant.control.MandantResetTransaction;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.mandant.entity.MandantPK;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.security.UseCaseSecure;
import de.ivu.elect.business.system.boundary.CacheResetSession;

public class MandantReset {

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

  @Inject
  private transient MandantResetTransaction mandantResetTransaction;

  @UseCaseSecure(UseCasePermission.MANDANT_RESET)
  public void resetMandant(MandantPK mandantPK) {
    LOG.info("Reset Mandant: " + mandantPK);
    Mandant neuerMandant = mandantResetTransaction.remove(mandantPK);
    if (neuerMandant == null) {
      return; // nichts weiter zu tun
    }
    try {
      LOG.info("Reset Mandant zweiter Versuch: " + mandantPK);
      // zweiter Versuch, um sicher zu gehen ("manchmal" Mandant noch vorhanden, wenn große Wahlen)
      mandantResetTransaction.remove(mandantPK);
    } catch (Exception ignore) {
      // ignore
    }
    LOG.info("Reset Mandant - recreate: " + mandantPK);
    mandantResetTransaction.create(neuerMandant);
  }

  @UseCaseSecure(UseCasePermission.MANDANT_RESET)
  public void resetMandant(Collection<MandantPK> mandantPK) {
    for (MandantPK pk : mandantPK) {
      resetMandant(pk);
    }
  }


}
