
package de.ivu.elect.presentation.lokalisierung;

import java.io.Serializable;

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

import de.ivu.elect.business.CurrentCustomer;
import de.ivu.elect.business.lokalisierung.entity.LokalisierungLocale;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.security.control.ElectCommonPrincipal;
import de.ivu.elect.jee.faces.FacesContextUtil;
import de.ivu.elect.jee.faces.UserLocale;
import de.ivu.elect.jee.presentation.redirect.Redirect;

/**
 * on 07.07.2015.
 */
@RequestScoped
@Named(LanguageChange.COMPONENT_NAME)
public class LanguageChange implements Serializable {

  public static final String COMPONENT_NAME = "languageChange";

  private static final long serialVersionUID = 1L;

  @Inject
  private transient ElectCommonPrincipal principal;

  @Inject
  private transient UserLocale userLocale;

  @Inject
  private transient CurrentCustomer currentCustomer;

  public LanguageChange() {
    super();
  }

  public boolean isChangeLanguagePossible() {
    return principal.hasUseCasePermission(UseCasePermission.LOKALISIERUNG_WECHSELN) && currentCustomer.getAlleUnterstuetztenSprachen().size() > 1;
  }

  public boolean isDeutschPossible() {
    return isLokalisierungLocalePossible(LokalisierungLocale.DEUTSCH);
  }

  @Redirect
  public String deutsch() {
    if (isDeutschPossible()) {
      userLocale.setLocale(LokalisierungLocale.DEUTSCH.getLocale());
    }

    return FacesContextUtil.getCurrentViewId();
  }

  public boolean isFranzoesischPossible() {
    return isLokalisierungLocalePossible(LokalisierungLocale.FRANZOESISCH);
  }

  @Redirect
  public String franzoesisch() {
    if (isFranzoesischPossible()) {
      userLocale.setLocale(LokalisierungLocale.FRANZOESISCH.getLocale());
    }

    return FacesContextUtil.getCurrentViewId();
  }

  public boolean isNiederlaendischPossible() {
    return isLokalisierungLocalePossible(LokalisierungLocale.NIEDERLAENDISCH);
  }

  public String niederlaendisch() {
    if (isNiederlaendischPossible()) {
      userLocale.setLocale(LokalisierungLocale.NIEDERLAENDISCH.getLocale());
    }

    return FacesContextUtil.getCurrentViewId();
  }

  public boolean isPolnischPossible() {
    return isLokalisierungLocalePossible(LokalisierungLocale.POLNISCH);
  }

  @Redirect
  public String polnisch() {
    if (isPolnischPossible()) {
      userLocale.setLocale(LokalisierungLocale.POLNISCH.getLocale());
    }

    return FacesContextUtil.getCurrentViewId();
  }

  public boolean isEnglischPossible() {
    return isLokalisierungLocalePossible(LokalisierungLocale.ENGLISCH);
  }

  @Redirect
  public String englisch() {
    if (isEnglischPossible()) {
      userLocale.setLocale(LokalisierungLocale.ENGLISCH.getLocale());
    }

    return FacesContextUtil.getCurrentViewId();
  }

  public boolean isDaenischPossible() {
    return isLokalisierungLocalePossible(LokalisierungLocale.DAENISCH);
  }

  @Redirect
  public String daenisch() {
    if (isDaenischPossible()) {
      userLocale.setLocale(LokalisierungLocale.DAENISCH.getLocale());
    }

    return FacesContextUtil.getCurrentViewId();
  }

  private boolean isLokalisierungLocalePossible(LokalisierungLocale lokalisierungLocale) {
    return isChangeLanguagePossible() && currentCustomer.getAlleUnterstuetztenSprachen().contains(lokalisierungLocale);
  }
}
