
package de.ivu.elect.business.ergebnis.control.kandidatur;

import de.ivu.elect.business.benutzerverwaltung.entity.Benutzer;
import de.ivu.elect.business.dokumente.entity.DokumentVorlage;
import de.ivu.elect.business.ergebnis.control.ErgebnisExchangeContext;
import de.ivu.elect.business.ergebnis.control.ErgebnisdokumentTypExportContext;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.jee.faces.Messages;

public class ErgebnisKandidaturenTabellarischDocumentExportContext extends ErgebnisdokumentTypExportContext {

  private static final long serialVersionUID = 1L;

  public static final int DOKUMENT_VORLAGE_ANZAHL_ZEILEN_PRO_SEITE_DEFAULT_VALUE = 25; // ELECT-15494

  // Cf. https://www.wahlen.bayern.de/lw2018/StMI/20_V5-Zus-st-ZweiteSchnellm-endgErg_LT-Bz.pdf.
  public static final int DOKUMENT_VORLAGE_ERSTE_SEITE_ANZAHL_SPALTEN_DEFAULT_VALUE = 5;

  public static final int DOKUMENT_VORLAGE_WEITERE_SEITEN_ANZAHL_SPALTEN_DEFAULT_VALUE = 8;

  private final boolean documentsCreatedPerStimmzettelgebiet;

  private final boolean documentsCreatedPerGemeinde;

  private final boolean tabellenCreatedPerDatenArt;

  private final boolean tabellenCreatedKreiseGesamt;

  private final boolean tabellenCreatedGemeindenGesamt;

  private final int anzahlZeilenProSeite;

  private final DokumentVorlage dokumentVorlageErsteSeite;

  private final int dokumentVorlageErsteSeiteAnzahlSpalten;

  private final DokumentVorlage dokumentVorlageWeitereSeiten;

  private final int dokumentVorlageWeitereSeitenAnzahlSpalten;

  public ErgebnisKandidaturenTabellarischDocumentExportContext(ErgebnisExchangeContext ergebnisExchangeContext, Ergebnis ergebnis, Benutzer benutzer, Messages messages,
      Boolean documentsCreatedPerStimmzettelgebiet, Boolean documentsCreatedPerGemeinde, Boolean tabellenCreatedPerDatenArt, Boolean tabellenCreatedKreiseGesamt,
      Boolean tabellenCreatedGemeindenGesamt, Integer anzahlZeilenProSeite, DokumentVorlage dokumentVorlageErsteSeite, Integer dokumentVorlageErsteSeiteAnzahlSpalten,
      DokumentVorlage dokumentVorlageWeitereSeiten, Integer dokumentVorlageWeitereSeitenAnzahlSpalten) {
    super(ergebnisExchangeContext, ergebnis, benutzer, messages);

    this.documentsCreatedPerStimmzettelgebiet = Boolean.TRUE.equals(documentsCreatedPerStimmzettelgebiet);
    this.documentsCreatedPerGemeinde = Boolean.TRUE.equals(documentsCreatedPerGemeinde);

    this.tabellenCreatedPerDatenArt = Boolean.TRUE.equals(tabellenCreatedPerDatenArt);

    this.tabellenCreatedKreiseGesamt = Boolean.TRUE.equals(tabellenCreatedKreiseGesamt);
    this.tabellenCreatedGemeindenGesamt = Boolean.TRUE.equals(tabellenCreatedGemeindenGesamt);

    this.anzahlZeilenProSeite = fixNullToDefault(anzahlZeilenProSeite, DOKUMENT_VORLAGE_ANZAHL_ZEILEN_PRO_SEITE_DEFAULT_VALUE);

    this.dokumentVorlageErsteSeite = dokumentVorlageErsteSeite;
    this.dokumentVorlageErsteSeiteAnzahlSpalten = fixNullToDefault(dokumentVorlageErsteSeiteAnzahlSpalten, DOKUMENT_VORLAGE_ERSTE_SEITE_ANZAHL_SPALTEN_DEFAULT_VALUE);

    if (dokumentVorlageWeitereSeiten == null) {
      this.dokumentVorlageWeitereSeiten = this.dokumentVorlageErsteSeite;
      this.dokumentVorlageWeitereSeitenAnzahlSpalten = this.dokumentVorlageErsteSeiteAnzahlSpalten;
    } else {
      this.dokumentVorlageWeitereSeiten = dokumentVorlageWeitereSeiten;
      this.dokumentVorlageWeitereSeitenAnzahlSpalten = fixNullToDefault(dokumentVorlageWeitereSeitenAnzahlSpalten, DOKUMENT_VORLAGE_WEITERE_SEITEN_ANZAHL_SPALTEN_DEFAULT_VALUE);
    }
  }

  public boolean isDocumentsCreatedPerStimmzettelgebiet() {
    return documentsCreatedPerStimmzettelgebiet;
  }

  public boolean isDocumentsCreatedPerGemeinde() {
    return documentsCreatedPerGemeinde;
  }

  public boolean isTabellenCreatedPerDatenArt() {
    return tabellenCreatedPerDatenArt;
  }

  public boolean isTabellenCreatedKreiseGesamt() {
    return tabellenCreatedKreiseGesamt;
  }

  public boolean isTabellenCreatedGemeindenGesamt() {
    return tabellenCreatedGemeindenGesamt;
  }

  public int getAnzahlZeilenProSeite() {
    return anzahlZeilenProSeite;
  }

  public boolean hasDokumentVorlageErsteSeite() {
    return getDokumentVorlageErsteSeite() != null;
  }

  public DokumentVorlage getDokumentVorlageErsteSeite() {
    return dokumentVorlageErsteSeite;
  }

  public int getDokumentVorlageErsteSeiteAnzahlSpalten() {
    return dokumentVorlageErsteSeiteAnzahlSpalten;
  }

  public boolean hasDokumentVorlageWeitereSeiten() {
    return getDokumentVorlageWeitereSeiten() != null;
  }

  public DokumentVorlage getDokumentVorlageWeitereSeiten() {
    return dokumentVorlageWeitereSeiten;
  }

  public int getDokumentVorlageWeitereSeitenAnzahlSpalten() {
    return dokumentVorlageWeitereSeitenAnzahlSpalten;
  }
}
