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

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

import de.ivu.elect.business.internet.control.InternetWidgetCreate;
import de.ivu.elect.business.internet.entity.InternetSeite;
import de.ivu.elect.business.internet.entity.InternetWidget;
import de.ivu.elect.jee.entity.customdata.DefaultCustomData;

@Stateless
@Specializes
public class CoreInternetSeiteBoundaryCreate extends InternetSeiteBoundaryCreate {

  @Inject
  private transient InternetSeiteDAO internetSeiteDAO;

  @Inject
  private transient InternetWidgetCreate internetWidgetCreate;

  @Inject
  private transient InternetWidgetDAO internetWidgetDAO;

  public InternetSeite copy(InternetSeite entityNotAttched) {
    var entity = internetSeiteDAO.attach(entityNotAttched);
    var copy = new InternetSeite(new DefaultCustomData());
    entity.copyEntityAttributesUsingSetter(copy);
    copy.setTitel(copy.getTitel() + " (copy)");
    copy.getCustomDataStorage().clearCustomDataCache();
    var wahl = entity.getWahl();
    copy.setWahl(wahl);
    if (wahl != null) {
      var maxPos = internetSeiteDAO.findByWahlMaxPosition(wahl);
      if (maxPos == null) {
        maxPos = 0L;
      }
      copy.setPosition(maxPos + 1);
    }
    save(copy);

    for (var internetWidget : internetWidgetDAO.findByInternetSeiteOrdered(entity)) {
      var copyWidget = new InternetWidget(new DefaultCustomData());
      internetWidget.copyEntityAttributesUsingSetter(copyWidget);
      copyWidget.getCustomDataStorage().clearCustomDataCache();
      copyWidget.setInternetSeite(copy);
      copyWidget.setIdentifier(null); // neu vergeben
      internetWidgetCreate.save(copyWidget);
    }

    return copy;

  }
}
