
package de.ivu.elect.wus.exchange.wahlvorschlag.csv;

import de.ivu.elect.business.datei.entity.Datei;
import de.ivu.elect.business.exchange.control.FileFormat;
import de.ivu.elect.business.kandidatur.control.WahlvorschlagExportContext;
import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.LambdaBooleanProperty;

import javax.annotation.Nullable;
import javax.inject.Inject;
import java.util.function.Predicate;

// ELECT-2997
public class WahlvorschlagCsvExportMapper extends AbstractWahlvorschlagCsvExportMapper<DefaultWahlvorschlagCsvDTO, WahlvorschlagCsvInternExternMapper> {

  public static final FileFormat FILE_FORMAT = DefaultWahlvorschlagCsvDTO.FILE_FORMAT;

  @Inject
  private transient WahlvorschlagCsvInternExternMapper wahlvorschlagCsvInternExternMapper;

  public WahlvorschlagCsvExportMapper() {
    super();
  }

  @Override
  public FileFormat getFileFormat() {
    return FILE_FORMAT;
  }

  @Override
  public void addProperties(FormBuilder formBuilder, WahlvorschlagExportContext context, @Nullable Datei datei) {
    formBuilder.addProperty(new LambdaBooleanProperty(getMessage("wahlvorschlag.export.nur.geburtsjahr"), false, context::setGeburtsdatumNurJahr, context::isGeburtsdatumNurJahr))
        .withTooltip(getMessage("wahlvorschlag.export.nur.geburtsjahr.tooltip"));

    formBuilder.addProperty(new LambdaBooleanProperty(getMessage("wahlvorschlag.export.fuer.veroeffentlichung"), false, context::setFuerVeroeffentlichung, context::isFuerVeroeffentlichung))
        .withTooltip(getMessage("wahlvorschlag.export.fuer.veroeffentlichung.tooltip"));

    addKandidaturStatusProperties(formBuilder, context);
  }

  protected void addKandidaturStatusProperties(FormBuilder formBuilder, WahlvorschlagExportContext context) {
    formBuilder.addProperty(new LambdaBooleanProperty(getMessage("wahlvorschlag.export.nicht.zugelassene"), false, context::setNichtZugelasseneExportieren, context::isNichtZugelasseneExportieren))
        .withTooltip(getMessage("wahlvorschlag.export.nicht.zugelassene.tooltip"));

    formBuilder.addProperty(new LambdaBooleanProperty(getMessage("wahlvorschlag.export.ungepruefte"), false, context::setUngepruefteExportieren, context::isUngepruefteExportieren))
        .withTooltip(getMessage("wahlvorschlag.export.ungepruefte.tooltip"));
  }

  @Override
  protected Predicate<Wahlvorschlag> wahlvorschlagExportierbar(WahlvorschlagExportContext context) {
    return wahlvorschlag -> true;
  }

  @Override
  protected Predicate<Kandidatur> kandidaturExportierbar(WahlvorschlagExportContext context) {
    return kandidatur -> true;
  }

  @Override
  protected WahlvorschlagCsvInternExternMapper getInternExternMapperMapper() {
    return wahlvorschlagCsvInternExternMapper;
  }
}
