package de.ivu.elect.business.internet.boundary;

import java.io.Serializable;

import javax.ejb.Stateless;
import javax.inject.Inject;

import de.ivu.elect.business.internet.entity.PraesentationUploadServiceKonfiguration;
import de.ivu.elect.business.praesentation.entity.PraesentationUploadServiceStatus;
import de.ivu.elect.business.praesentation.entity.PraesentationUploadServiceTyp;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlParameter;
import de.ivu.elect.business.wahl.entity.WahlParameterLoader;
import de.ivu.elect.business.wahl.entity.WahlParameterWerte;
import de.ivu.elect.jee.faces.Messages;


import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.PREASENTATIION_UPLOAD_SERVICE_BENUTZER;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.PREASENTATIION_UPLOAD_SERVICE_KONFIG;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.PREASENTATIION_UPLOAD_SERVICE_PASSWORT;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.PREASENTATIION_UPLOAD_SERVICE_STATUS;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.PREASENTATIION_UPLOAD_SERVICE_TYP;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.PREASENTATIION_UPLOAD_SERVICE_URL;

@Stateless
public class PraesentationUploadServiceKonfigurieren implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlParameterLoader wahlParameterLoader;

  @Inject
  private transient Messages messages;

  public PraesentationUploadServiceKonfiguration getPraesentationUploadServiceKonfiguration(Wahl wahl) {

    if (wahl==null){
      return PraesentationUploadServiceKonfiguration.EMPTY;
    }

    PraesentationUploadServiceStatus status = wahlParameterLoader
        .resolveEnumValue(wahl, PREASENTATIION_UPLOAD_SERVICE_STATUS, PraesentationUploadServiceStatus.class);

    PraesentationUploadServiceTyp typ = wahlParameterLoader.resolveEnumValue(wahl, PREASENTATIION_UPLOAD_SERVICE_TYP, PraesentationUploadServiceTyp.class);
    String url = wahlParameterLoader.resolveStringValue(wahl, PREASENTATIION_UPLOAD_SERVICE_URL);
    String benutzer = wahlParameterLoader.resolveStringValue(wahl, PREASENTATIION_UPLOAD_SERVICE_BENUTZER);
    String passwort = wahlParameterLoader.resolveStringValue(wahl, PREASENTATIION_UPLOAD_SERVICE_PASSWORT);
    String konfig = wahlParameterLoader.resolveStringValue(wahl, PREASENTATIION_UPLOAD_SERVICE_KONFIG);

    return new PraesentationUploadServiceKonfiguration(status, typ, url, benutzer, passwort, konfig);
  }

  public void savePraesentationUploadServiceKonfiguration(Wahl wahl, PraesentationUploadServiceKonfiguration konfiguration) {
    changeWahlparameter(wahl, PREASENTATIION_UPLOAD_SERVICE_STATUS, konfiguration.getStatus().name());
    changeWahlparameter(wahl, PREASENTATIION_UPLOAD_SERVICE_TYP, konfiguration.getTyp().name());
    changeWahlparameter(wahl, PREASENTATIION_UPLOAD_SERVICE_URL, konfiguration.getUrl());
    changeWahlparameter(wahl, PREASENTATIION_UPLOAD_SERVICE_BENUTZER, konfiguration.getBenutzer());
    changeWahlparameter(wahl, PREASENTATIION_UPLOAD_SERVICE_PASSWORT, konfiguration.getPasswort());
    changeWahlparameter(wahl, PREASENTATIION_UPLOAD_SERVICE_KONFIG, konfiguration.getKonfig());
  }

  private void changeWahlparameter(Wahl wahl, WahlParameterWerte wahlParameterWerte, String value) {
    WahlParameter parameter = wahlParameterLoader.getParameter(wahl, wahlParameterWerte);
    parameter.setWert(value);
   // wahlParameterEdit.save(parameter);
  }
}
