
package de.ivu.elect.presentation.gruppeimgebiet.menu;

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

import javax.inject.Inject;

import de.ivu.elect.business.gruppeimgebiet.boundary.GruppeImGebietExtendedDAO;
import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.wahlvorschlag.control.ReferendumOptionByPositionComparator;
import de.ivu.elect.business.wahlvorschlag.entity.ReferendumOption;
import de.ivu.elect.presentation.View;
import de.ivu.elect.presentation.gruppeimgebiet.ReferendumVorlageImGebietSearchView;
import de.ivu.elect.presentation.wahlvorschlag.dokumente.WahlvorschlaegeAlsListeDokumentErzeugenView;
import de.ivu.elect.presentation.wahlvorschlag.menu.AbstractWahlvorschlaegeAlsListeDokumentErzeugenMenuItemEntry;

public class ReferendumVorlageImGebietWahlvorschlaegeAlsListeDokumentErzeugenMenuItemEntry extends AbstractWahlvorschlaegeAlsListeDokumentErzeugenMenuItemEntry {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient GruppeImGebietExtendedDAO gruppeImGebietExtendedDAO;

  @View
  @Inject
  private transient ReferendumVorlageImGebietSearchView referendumVorlageImGebietSearchView;

  public ReferendumVorlageImGebietWahlvorschlaegeAlsListeDokumentErzeugenMenuItemEntry() {
    super();
  }

  @Override
  protected String initWahlvorschlaege(WahlvorschlaegeAlsListeDokumentErzeugenView wahlvorschlaegeAlsListeDokumentErzeugenView) {
    List<ReferendumOption> referendumOptionenImGebiet = new ArrayList<>();

    for (GruppeImGebiet referendumVorlageImGebiet : attachAll(referendumVorlageImGebietSearchView.getSearchResult())) {
      List<ReferendumOption> referendumOptionen = new ArrayList<>(referendumVorlageImGebiet.getReferendumOptionen());
      referendumOptionen.sort(new ReferendumOptionByPositionComparator());

      referendumOptionenImGebiet.addAll(referendumOptionen);
    }

    return wahlvorschlaegeAlsListeDokumentErzeugenView.initWahlvorschlaege(referendumOptionenImGebiet);
  }

  private List<GruppeImGebiet> attachAll(List<GruppeImGebiet> referendumVorlageImGebiet) {
    return gruppeImGebietExtendedDAO.attachAll(referendumVorlageImGebiet);
  }
}
