
package de.ivu.elect.dokumente.stimmzettel;

import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;

import javax.inject.Inject;

import de.ivu.elect.business.datei.entity.FileType;
import de.ivu.elect.business.stimmzettel.control.StimmzettelExportContext;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.LambdaEnumProperty;
import de.ivu.elect.presentation.ViewFormBuilder;
import de.ivu.elect.presentation.wahlvorschlag.form.WahlvorschlagDokumentErzeugenViewFormBuilder;

public class AbstractStimmzettelExportFormBuilder extends ViewFormBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlvorschlagDokumentErzeugenViewFormBuilder wahlvorschlagDokumentErzeugenViewFormBuilder;

  public AbstractStimmzettelExportFormBuilder() {
    super();
  }

  protected void addPropertyTargetFileType(FormBuilder formBuilder, Supplier<FileType> getter, Consumer<FileType> setter, List<FileType> values) {
    addPropertyTargetFileType(formBuilder, getter, setter, "dokument.erzeugen.zieldatei.typ", values, false);
  }

  protected void addPropertyTargetFileType(FormBuilder formBuilder, Supplier<FileType> getter, Consumer<FileType> setter, String labelMsgKey, List<FileType> values, boolean hasNoSelectionItem) {
    if (!values.isEmpty()) { // ELECT-9240
      formBuilder.addProperty(new LambdaEnumProperty<>(getMessage(labelMsgKey), values.get(0), false, setter, getter, FileType.class, values, hasNoSelectionItem));
    }
  }

  protected void addPropertyKandidaturFormatDarstellung(FormBuilder formBuilder, StimmzettelExportContext context, boolean hasNoSelectionItem) {
    wahlvorschlagDokumentErzeugenViewFormBuilder.addPropertyKandidaturFormatDarstellung(formBuilder, context.getWahl(), context::getKandidaturFormatDarstellung,
        context::setKandidaturFormatDarstellung, hasNoSelectionItem);
  }

  protected void addPropertyKandidaturFormatDarstellung(FormBuilder formBuilder, StimmzettelExportContext context, String labelMsgKey, boolean hasNoSelectionItem) {
    wahlvorschlagDokumentErzeugenViewFormBuilder.addPropertyKandidaturFormatDarstellung(formBuilder, context::getKandidaturFormatDarstellung, context::setKandidaturFormatDarstellung, labelMsgKey,
        hasNoSelectionItem);
  }
}
