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 GebietEdit {

  @Inject
  private transient WahlvorschlagDAO wahlvorschlagDAO;

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

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