package de.ivu.elect.business.aufgabe.control;

import java.util.Date;

import javax.inject.Inject;

import de.ivu.elect.business.aufgabe.entity.Aufgabe;
import de.ivu.elect.business.benutzerverwaltung.boundary.RolleDAO;
import de.ivu.elect.business.wahl.boundary.WahlDAO;
import de.ivu.elect.business.wahl.boundary.WahlterminDAO;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;

public class AufgabeCreate extends AbstractAufgabeCreate {

  @Inject
  protected transient WahlterminDAO wahlterminDAO;

  @Inject
  protected transient WahlDAO wahlDAO;

  @Inject
  protected transient RolleDAO rolleDAO;

  @Override
  public void save(Aufgabe entity) {
    entity.setWahltermin(wahlterminDAO.attach(entity.getWahltermin()));
    entity.setWahl(wahlDAO.attach(entity.getWahl()));
    entity.setBearbeitet(rolleDAO.attach(entity.getBearbeitet()));
    entity.setSichtbar(rolleDAO.attach(entity.getSichtbar()));
    if (entity.getErstelltAm() == null) {
      entity.setErstelltAm(new Date());
    }
    if (entity.getNummer() == null) {
      entity.setNummer(bestimmeLetzteNummer(entity.getWahltermin(), entity.getWahl()) + 1);
    }

    super.save(entity);

  }

  private Long bestimmeLetzteNummer(Wahltermin wahltermin, Wahl wahl) {
    Long max;
    if (wahl == null) {
      max = dao.findByWahlterminMaxNummer(wahltermin);
    } else {
      max = dao.findByWahlMaxNummer(wahl);
    }
    if (max == null) {
      return 0L;
    }
    return Math.max(max, 0L);

  }
}
