package de.ivu.elect.business.benutzerverwaltung.control;

import javax.inject.Inject;

import de.ivu.elect.business.benutzerverwaltung.entity.BenutzerParameter;
import de.ivu.elect.business.benutzerverwaltung.entity.BenutzerParameterLoaderContext;
import de.ivu.elect.business.benutzerverwaltung.entity.BenutzerParameterWerte;
import de.ivu.elect.business.security.control.ElectCommonPrincipal;

public class PrincipalBenutzerParameterLoader extends AbstractBenutzerParameterLoader {

  @Inject
  private transient ElectCommonPrincipal principal;

  public String resolveString(BenutzerParameterWerte benutzerParameterWerte) {
    return resolveStringValue(createContext(benutzerParameterWerte));
  }

  public String resolveRequiredString(BenutzerParameterWerte benutzerParameterWerte) {
    return resolveRequiredStringValue(createContext(benutzerParameterWerte));
  }

  private BenutzerParameterLoaderContext createContext(BenutzerParameterWerte benutzerParameterWerte) {
    return new BenutzerParameterLoaderContext(benutzerParameterWerte);
  }

  public <V extends Enum<?>> V resolveEnumValue(BenutzerParameterWerte benutzerParameterWerte, Class<V> enumClass) {
    return resolveEnumValue(createContext(benutzerParameterWerte), enumClass);
  }

  public Long resolveRequiredLong(BenutzerParameterWerte benutzerParameterWerte) {
    return Long.parseLong(resolveRequiredString(benutzerParameterWerte));
  }


  @Override
  protected BenutzerParameter getParameter(BenutzerParameterLoaderContext context) {
    String value = principal.getBenutzerEinstellungen().get(context.getTemplate());
    BenutzerParameter result = new BenutzerParameter();
    result.setKey(context.getTemplate().getKey());
    result.setWert(value);
    return result;
  }
}
