
package de.ivu.elect.presentation.lokalisierung;

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

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.lokalisierung.boundary.LokalisierungExtendedDAO;
import de.ivu.elect.business.lokalisierung.control.LokalisierungByLocaleComparator;
import de.ivu.elect.business.lokalisierung.control.LokalisierungInit;
import de.ivu.elect.business.lokalisierung.entity.Lokalisierung;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.View;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;

/**
 * NICHT als Vorlage für weitere Entitäten benutzen...verwendet im Editor mehr als eine Entität
 */
@OnlineHilfeId(value = "265", mehrfachVergebenOk = true)
@RequestScoped
@Named(AbstractLokalisierungEditNoScopeView.COMPONENT_NAME)
@View(viewId = AbstractLokalisierungEditNoScopeView.VIEW_ID, useCase = UseCasePermission.LOKALISIERUNG_EDIT)
public class LokalisierungEditView extends AbstractLokalisierungEditView {

  private static final long serialVersionUID = 1L;

  @Inject
  private LokalisierungExtendedDAO lokalisierungExtendedDAO;

  @Inject
  private LokalisierungInit lokalisierungInit;

  public LokalisierungEditView() {
    super();
  }

  @Override
  public void addProperties(FormBuilder formBuilder, Lokalisierung entity) {
    formBuilder.addProperty(entity.getProperties().getSchluesselProperty()).readonly();
    formBuilder.addProperty(entity.getProperties().getModulProperty()).readonly();

    for (Lokalisierung lokalisierung : getLokalisierungen()) {
      formBuilder.addSeparator("lokalisierung.edit.separator.sprache", getMessage(lokalisierung.getLocale()));
      formBuilder.addProperty(lokalisierung.getProperties().getWertPropertydateiProperty()).readonly();
      formBuilder.addProperty(lokalisierung.getProperties().getWertGeaendertProperty());
    }
  }

  @Override
  public String save() {
    List<Lokalisierung> lokalisierungen = getLokalisierungen();

    edit.save(lokalisierungen);

    // Zweite Transaktion für Cache...ExtendedDAO und so...
    lokalisierungInit.aktualisiereLokalisierungStore();

    addMessageSaveSuccess();

    conversationStore.close();

    return goBack(getParentViewId());
  }

  protected void addMessageSaveSuccess() {
    addInfoMessage("entity.edit.action.save.success.message", entityMeta.getMehrzahlMessage());
  }

  public List<Lokalisierung> getLokalisierungen() {
    List<Lokalisierung> result = new ArrayList<>();

    Lokalisierung lokalisierung = getEntity();
    if (lokalisierung == null) {
      return result;
    }

    result.addAll(lokalisierungExtendedDAO.findBySchluessel(lokalisierung.getSchluessel()));
    Collections.sort(result, new LokalisierungByLocaleComparator());
    result.remove(lokalisierung);
    result.add(0, lokalisierung); // ausgewählte Sprache als erstes...

    return result;
  }

  @Override
  protected boolean isGebietBearbeitenRechtPruefen() {
    return false;
  }
}
