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

import java.util.Collection;

import de.ivu.elect.business.benutzerverwaltung.entity.Benutzer;
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.WahlParameter;
import de.ivu.elect.business.wahl.entity.WahlParameterWerte;
import de.ivu.elect.business.wahl.entity.Wahltermin;


import static java.util.Objects.isNull;

public abstract class AbstractWahlParameterInit extends AbstractCustomParameterInit<WahlParameterWerte, WahlParameter> implements WahlParameterInit {

  private Collection<WahlParameter> parameters;

  public AbstractWahlParameterInit() {
    super();
  }

  @Override
  public Collection<WahlParameter> getDefaultParameters(KonfigurationInitContext konfigurationInitContext) {
    if (isNull(parameters)) {
      parameters = createDefaultParameters(konfigurationInitContext.getWahltermin(), konfigurationInitContext.getWahl());
    }

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

    return parameters;
  }

  protected abstract Collection<WahlParameter> createDefaultParameters(Wahltermin wahltermin, Wahl wahl);

  @Override
  protected WahlParameter create(String key, String value) {
    WahlParameter wahlParameter = new WahlParameter();
    wahlParameter.setKey(key);
    wahlParameter.setWert(value);

    return wahlParameter;
  }
}
