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

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

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagDAO;
import de.ivu.elect.jee.exception.ElectCommonException;

@Stateless
@Specializes
public class CoreGebietEdit extends CommonGebietEdit {

  @Inject
  private transient WahlvorschlagDAO wahlvorschlagDAO;

  @Override
  protected void requireDeleteMoeglich(Gebiet attachedEntity) {
    super.requireDeleteMoeglich(attachedEntity);
    if (isWahlvorschlaegeVorhanden(attachedEntity)) {
      throw new ElectCommonException("gebiet.kann.nicht.geloescht.werden.wahlvorschlaege.vorhanden");
    }
  }

  private boolean isWahlvorschlaegeVorhanden(Gebiet attachedEntity) {
    return wahlvorschlagDAO.findByWahl(attachedEntity.getWahl()).stream()
      .anyMatch(wahlvorschlag -> wahlvorschlag.getGebiet().isInGebietshierarchieUntergeordnetesGebietVon(attachedEntity));
  }
}
