package de.ivu.elect.presentation.hilfe;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.security.control.ElectCommonPrincipal;
import de.ivu.elect.jee.faces.UserLocale;

/**
 *  on 19.08.2015.
 */
public class OnlineHilfeVerfuegbar implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient ElectCommonPrincipal principal;

  @Inject
  private transient UserLocale userLocale;

  @Inject
  private transient HelpReader helpReader;

  private static Boolean onlineHilfeVerfuegbar = null;

  public boolean isOnlineHilfeVerfuegbar() {
    if (onlineHilfeVerfuegbar == null) {
      onlineHilfeVerfuegbar = bestimmeOnlineHilfeVerfuegbar();
    }
    return onlineHilfeVerfuegbar;
  }

  public boolean isOnlineHilfeContextSensitivVerfuegbar() {
    return isOnlineHilfeVerfuegbar();
  }

  private Boolean bestimmeOnlineHilfeVerfuegbar() {
    return helpReader.isHilfeVorhanden();
  }

  public boolean isRechtFuerOnlineHilfeVorhanden() {
    return principal.hasUseCasePermission(UseCasePermission.ONLINE_HILFE_ANZEIGEN);
  }

  protected OnlineHilfeSprache getOnlineHilfeFallback() {
    return OnlineHilfeSprache.DEUTSCH;
  }

  protected List<OnlineHilfeSprache> getVerfuegbareSprachenOnlineHilfe() {
    return Collections.singletonList(OnlineHilfeSprache.DEUTSCH);
  }

  public String getOnlineHilfePath() {
    return getOnlineHilfeFuerUser().getOnlineHilfePath();
  }

  protected OnlineHilfeSprache getOnlineHilfeFuerUser() {
    OnlineHilfeSprache sprache = OnlineHilfeSprache.fromLocale(userLocale.getLocale());
    if (sprache == null || !getVerfuegbareSprachenOnlineHilfe().contains(sprache)) {
      return getOnlineHilfeFallback();
    }
    return sprache;
  }

  public String getIndexFile() {
    return "index.html";
  }
}
