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

import javax.inject.Inject;

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


import static java.util.Objects.nonNull;

public class WahlterminCreate extends AbstractWahlterminCreate {

  @Inject
  private transient RolleDAO rolleDao;

  @Inject
  private transient WahlterminValidator wahlterminValidator;

  @Inject
  private transient WahlterminPostCreate wahlterminPostCreate;

  @Inject
  private transient MandantDAO mandantDAO;

  public WahlterminCreate() {
    super();
  }

  @Override
  public void save(Wahltermin wahltermin) {
    validate(wahltermin);

    wahltermin.setMandant(mandantDAO.attach(wahltermin.getMandant()));

    Rolle einsehenRolle = wahltermin.getEinsehenRolle();

    if (nonNull(einsehenRolle) && einsehenRolle.isPersistent()) {
      wahltermin.setEinsehenRolle(attach(einsehenRolle));
    }


    if (wahltermin.getEinsehenRolle()!=null && !wahltermin.getEinsehenRolle().isPersistent()){
      wahltermin.getEinsehenRolle().setMandant(wahltermin.getMandant());
    }
    super.save(wahltermin);

    wahlterminPostCreate.postCreate(wahltermin);
  }

  private void validate(Wahltermin entity) {
    wahlterminValidator.validate(entity, dao);
  }

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