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

import java.util.Collection;

import de.ivu.elect.business.benutzerverwaltung.entity.Benutzer;
import de.ivu.elect.business.benutzerverwaltung.entity.BenutzerParameter;
import de.ivu.elect.business.benutzerverwaltung.entity.BenutzerParameterWerte;
import de.ivu.elect.business.konfiguration.control.AbstractCustomParameterInit;
import de.ivu.elect.business.konfiguration.entity.KonfigurationInitContext;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;


import static java.util.Objects.isNull;

public abstract class AbstractBenutzerParameterInit extends AbstractCustomParameterInit<BenutzerParameterWerte, BenutzerParameter> implements BenutzerParameterInit {

  private Collection<BenutzerParameter> parameters;

  public AbstractBenutzerParameterInit() {
    super();
  }

  @Override
  public Collection<BenutzerParameter> getDefaultParameters(KonfigurationInitContext konfigurationInitContext) {
    if (isNull(parameters)) {
      parameters = createDefaultParameters(konfigurationInitContext.getBenutzer());
    }

    overrideDefaultParameters(konfigurationInitContext.getWahltermin(), konfigurationInitContext.getWahl(), parameters);

    return parameters;
  }

  protected abstract Collection<BenutzerParameter> createDefaultParameters(Benutzer benutzer);

  @Override
  protected BenutzerParameter create(String key, String value) {
    BenutzerParameter parameter = new BenutzerParameter();
    parameter.setKey(key);
    parameter.setWert(value);
    return parameter;
  }
}
