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

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import javax.inject.Inject;

import de.ivu.elect.business.benutzerverwaltung.boundary.RolleDAO;
import de.ivu.elect.business.benutzerverwaltung.entity.Nachricht;
import de.ivu.elect.business.benutzerverwaltung.entity.Rolle;
import de.ivu.elect.business.mandant.boundary.MandantDAO;

public class NachrichtCreate extends AbstractNachrichtCreate {

  @Inject
  private transient RolleDAO rolleDao;

  @Inject
  private transient MandantDAO mandantDAO;

  public NachrichtCreate() {
    super();
  }

  @Override
  public void save(Nachricht nachricht) {
    Collection<Rolle> empfaengerRollen = new ArrayList<>(nachricht.getEmpfaengerRollen());

    nachricht.setMandant(mandantDAO.attach(nachricht.getMandant()));
    nachricht.removeEmpfaengerRollen();
    empfaengerRollen.forEach(empfaengerRolle -> nachricht.addEmpfaengerRolle(attach(empfaengerRolle)));


    if (nachricht.hasUrspruenglicheNachricht()) {
      nachricht.setUrspruenglicheNachricht(attach(nachricht.getUrspruenglicheNachricht()));
    }

    nachricht.setZeitpunkt(new Date());

    super.save(nachricht);
  }

  private Nachricht attach(Nachricht nachricht) {
    return dao.attach(nachricht);
  }

  private Rolle attach(Rolle rolle) {
    return rolleDao.attach(rolle);
  }
}
