package de.ivu.elect.core.exchange.stimmen.csv.dynamic;

import javax.annotation.Nonnull;

import de.ivu.elect.business.gebietsbaum.boundary.WahlverwaltungGebietInformationResolver;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.stimmeingabe.control.ListenwahlStimmeingabeKonfiguration;

public class ConfigDynamicStimmenExportDTOFactory extends DefaultDynamicStimmenExportDTOFactory {

  public static final String HEADER_GEBIETSNUMMER = "Gebietsnummer";

  public static final String HEADER_GEBIETSART = "Gebietsart";

  public static final String HEADER_GEBIETSNAME = "Gebietsname";

  private final ConfigDynamicStimmen configDynamicStimmen;

  public ConfigDynamicStimmenExportDTOFactory(Wahldurchfuehrungsgebiet wurzelgebiet, DynamicStimmenExchangeErgebnisDaten ergebnisDaten,
                                              ListenwahlStimmeingabeKonfiguration listenwahlStimmeingabeKonfiguration,
                                              WahlverwaltungGebietInformationResolver wahlverwaltungGebietInformationResolver, ConfigDynamicStimmen configDynamicStimmen) {
    super(wurzelgebiet, ergebnisDaten, listenwahlStimmeingabeKonfiguration, wahlverwaltungGebietInformationResolver,
        configDynamicStimmen.isAusbleibendAusgeben());
    this.configDynamicStimmen = configDynamicStimmen;
  }

  @Nonnull
  @Override
  protected String getHeaderGebietsart() {
    return HEADER_GEBIETSART;
  }

  @Nonnull
  @Override
  protected String getHeaderGebietsNummer() {
    return HEADER_GEBIETSNUMMER;
  }

  @Override
  protected String getHeaderGebietsName() {
    return HEADER_GEBIETSNAME;
  }

  @Override
  protected boolean isErfassungsgebietNameAusgaben() {
    return configDynamicStimmen.isErfassungsgebietNameAusgeben();
  }

  @Override
  protected boolean isBezirksnummerAusgeben() {
    return configDynamicStimmen.isBezirksnummerAusgeben();
  }

  @Override
  public boolean isGebietsbaumContainsGemeinde() {
    return super.isGebietsbaumContainsGemeinde() && configDynamicStimmen.isGemeindeAusgeben();
  }

  @Override
  protected boolean isGemeindeNameAnzeigen() {
    return super.isGebietsbaumContainsGemeinde() && configDynamicStimmen.isGemeindeNameAusgeben();
  }

  @Override
  public boolean isGebietsbaumContainsWahlkreis() {
    return super.isGebietsbaumContainsWahlkreis() && configDynamicStimmen.isWahlkreisAusgeben();
  }

}
