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

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

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

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Gebietsgruppierung;
import de.ivu.elect.business.system.entity.SystemLog;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;

@Stateless
public class GebietsgruppierungEdit extends AbstractGebietsgruppierungEdit {

  @Inject
  private GebietExtendedDAO gebietDao;

  public GebietsgruppierungEdit() {
    super();
  }

  @Override
  public void save(Gebietsgruppierung gebietsgruppierung) {
    Collection<Gebiet> gebieteZugeordnet = new ArrayList<>(gebietsgruppierung.getGebiete());

    gebietsgruppierung.removeAllGebiets();

    for (Gebiet gebiet : gebieteZugeordnet) {
      gebietsgruppierung.addGebiet(attach(gebiet));
    }

    super.save(gebietsgruppierung);
  }

  private Gebiet attach(Gebiet gebiet) {
    return gebietDao.attach(gebiet);
  }

  public void deleteAll(Wahltermin selectedWahltermin, Wahl selectedWahl) {
    if (selectedWahl != null) {
      dao.deleteWahlDelete(selectedWahl);
    } else {
      if (selectedWahltermin!=null) {
        dao.deleteWahlterminDelete(selectedWahltermin);
      }
    }
  }

  public void deleteSearched(List<Gebietsgruppierung> gebietsgruppierungen) {
    for (Gebietsgruppierung gebietsgruppierung : dao.attachAll(gebietsgruppierungen)) {
      dao.remove(gebietsgruppierung);
    }
  }
}
