package de.ivu.elect.presentation.internet;

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

import de.ivu.elect.business.praesentation.boundary.PraesentationStatusHelper;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.ReadOnlyBooleanProperty;
import de.ivu.elect.jee.presentation.redirect.Redirect;

@Specializes
public class WasInternetSeiteSearchView extends InternetSeiteSearchView {
  private static final long serialVersionUID = 1L;

  @Inject
  private transient PraesentationStatusHelper praesentationStatusHelper;

  @Override
  public void addProperties(FormBuilder formBuilder) {
    super.addProperties(formBuilder);
    formBuilder.addSeparator("praesentation.status.internet.seiten");
    boolean internetSeitenInDokumentvorlageVorhanden = isInternetSeitenInDokumentvorlageVorhanden();
    formBuilder.addProperty(new ReadOnlyBooleanProperty(getMessage("praesentation.status.internet.seiten.dokumentvorlage.vorhanden"),
        internetSeitenInDokumentvorlageVorhanden));

    formBuilder.addProperty(new ReadOnlyBooleanProperty(getMessage("praesentation.status.internet.seiten.dokumentvorlage.aktiviert"),
        isDokumentvorlageAktiviert()));

    formBuilder.addProperty(new ReadOnlyBooleanProperty(getMessage("praesentation.status.internet.seiten.dokumentvorlage.verwenden"),
        internetSeitenInDokumentvorlageVorhanden && !praesentationStatusHelper.isInternetSeitenInWahlVorhanden(getSelectedWahl()) && isDokumentvorlageAktiviert()));
  }

  @Override
  public void resetSearchResult() {
    super.resetSearchResult();
    resetSearchParametersModel(); // ELECT-12184
  }

  private boolean isInternetSeitenInDokumentvorlageVorhanden() {
    return praesentationStatusHelper.isInternetSeitenInDokumentvorlageVorhanden(getSelectedWahl());
  }

  private boolean isDokumentvorlageAktiviert() {
    return praesentationStatusHelper.isDokumentvorlageVerwenden(getSelectedWahl());
  }

  @Override
  public boolean isBtnDokumentvorlageAktivierenRendered() {
    return hasWahlParameterEditUseCasePermission() && !isDokumentvorlageAktiviert();
  }

  @Override
  public boolean isBtnDokumentvorlageAktivierenDisabled() {
    return !isInternetSeitenInDokumentvorlageVorhanden();
  }

  @Override
  public boolean isBtnDokumentvorlageDeaktivierenRendered() {
    return hasWahlParameterEditUseCasePermission() && isDokumentvorlageAktiviert();
  }

  @Override
  public boolean isBtnDokumentvorlageDeaktivierenDisabled() {
    return false;
  }

  @Redirect
  @Override
  public String dokumentvorlageAktivieren() {
    praesentationStatusHelper.dokumentvorlagenAktivieren(getSelectedWahl());
    addInfoMessage("praesentation.status.internet.seiten.dokumentvorlage.aktiviert.success");
    reset();
    return VIEW_ID;
  }

  @Redirect
  @Override
  public String dokumentvorlageDeaktivieren() {
    praesentationStatusHelper.dokumentvorlagenDeaktivieren(getSelectedWahl());
    addInfoMessage("praesentation.status.internet.seiten.dokumentvorlage.deaktiviert.success");
    reset();
    return VIEW_ID;
  }

  private boolean hasWahlParameterEditUseCasePermission(){
    return hasPermission(UseCasePermission.WAHL_PARAMETER_EDIT);
  }


  @Override
  public boolean isBtnStandardDokumentVorlageWiederherstellenRendered() {
    return hasPermission(UseCasePermission.INTERNET_SEITE_DELETE) && hasPermission(UseCasePermission.INTERNET_SEITE_CREATE);
  }

  @Override
  public boolean isBtnStandardDokumentVorlageWiederherstellenDisabled() {
    return !isInternetSeitenInDokumentvorlageVorhanden();
  }

  @Override
  @Redirect
  public String standardDokumentVorlageWiederherstellen() {
    praesentationStatusHelper.standardDokumentVorlageWiederherstellen(getSelectedWahl());
    addInfoMessage("praesentation.status.internet.seiten.dokumentvorlage.standard.success");
    reset();
    return VIEW_ID;
  }


}
