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

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 ErgebnisGesamtergebnisTabellarischDocumentExportContext extends ErgebnisdokumentTypExportContext {

  private static final long serialVersionUID = 1L;

  public static final int DOKUMENT_VORLAGE_ANZAHL_ZEILEN_PRO_SEITE_DEFAULT_VALUE = 25;

  // Cf. https://www.wahlen.bayern.de/lw2018/StMI/22_V7-Zus-stellung-endgErg_LT-Bz.pdf.
  public static final int DOKUMENT_VORLAGE_ERSTE_SEITE_ANZAHL_SPALTEN_DEFAULT_VALUE = 12;

  public static final int DOKUMENT_VORLAGE_WEITERE_SEITEN_ANZAHL_SPALTEN_DEFAULT_VALUE = 14;

  private final boolean documentsCreatedPerStimmzettelgebiet;

  private final boolean documentsCreatedPerStimmzettelgebietKompakt;

  private final boolean documentsCreatedPerGemeinde;

  private final boolean tabellenCreatedPerDatenArt;

  private final boolean tabellenCreatedKreiseGesamt;

  private final boolean tabellenCreatedGemeindenGesamt;

  private final int anzahlZeilenProSeite;

  private final DokumentVorlage dokumentVorlageGesamtergebnis;

  private final DokumentVorlage dokumentVorlageErsteSeiteDirektstimmen;

  private final DokumentVorlage dokumentVorlageErsteSeiteListenstimmen;

  private final DokumentVorlage dokumentVorlageErsteSeiteStimmzettel;

  private final int dokumentVorlageErsteSeiteAnzahlSpalten;

  private final DokumentVorlage dokumentVorlageWeitereSeitenDirektstimmen;

  private final DokumentVorlage dokumentVorlageWeitereSeitenListenstimmen;

  private final DokumentVorlage dokumentVorlageWeitereSeitenStimmzettel;

  private final int dokumentVorlageWeitereSeitenAnzahlSpalten;

  public ErgebnisGesamtergebnisTabellarischDocumentExportContext(ErgebnisExchangeContext ergebnisExchangeContext, Ergebnis ergebnis, Benutzer benutzer, Messages messages,
      Boolean documentsCreatedPerStimmzettelgebiet, Boolean documentsCreatedPerGemeinde, Boolean tabellenCreatedPerDatenArt, Boolean tabellenCreatedKreiseGesamt,
      Boolean tabellenCreatedGemeindenGesamt, Integer anzahlZeilenProSeite, DokumentVorlage dokumentVorlageGesamtergebnis, DokumentVorlage dokumentVorlageErsteSeiteDirektstimmen,
      DokumentVorlage dokumentVorlageErsteSeiteListenstimmen, DokumentVorlage dokumentVorlageErsteSeiteStimmzettel, Integer dokumentVorlageErsteSeiteAnzahlSpalten,
      DokumentVorlage dokumentVorlageWeitereSeitenDirektstimmen, DokumentVorlage dokumentVorlageWeitereSeitenListenstimmen, DokumentVorlage dokumentVorlageWeitereSeitenStimmzettel,
      Integer dokumentVorlageWeitereSeitenAnzahlSpalten) {
    super(ergebnisExchangeContext, ergebnis, benutzer, messages);

    this.documentsCreatedPerStimmzettelgebiet = Boolean.TRUE.equals(documentsCreatedPerStimmzettelgebiet);
    this.documentsCreatedPerStimmzettelgebietKompakt = Boolean.FALSE.equals(tabellenCreatedPerDatenArt); // ELECT-16479

    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.dokumentVorlageGesamtergebnis = dokumentVorlageGesamtergebnis;

    this.dokumentVorlageErsteSeiteDirektstimmen = dokumentVorlageErsteSeiteDirektstimmen;
    this.dokumentVorlageErsteSeiteListenstimmen = dokumentVorlageErsteSeiteListenstimmen;
    this.dokumentVorlageErsteSeiteStimmzettel = dokumentVorlageErsteSeiteStimmzettel;
    this.dokumentVorlageErsteSeiteAnzahlSpalten = fixNullToDefault(dokumentVorlageErsteSeiteAnzahlSpalten, DOKUMENT_VORLAGE_ERSTE_SEITE_ANZAHL_SPALTEN_DEFAULT_VALUE);

    this.dokumentVorlageWeitereSeitenDirektstimmen = dokumentVorlageWeitereSeitenDirektstimmen;
    this.dokumentVorlageWeitereSeitenListenstimmen = dokumentVorlageWeitereSeitenListenstimmen;
    this.dokumentVorlageWeitereSeitenStimmzettel = dokumentVorlageWeitereSeitenStimmzettel;
    this.dokumentVorlageWeitereSeitenAnzahlSpalten = fixNullToDefault(dokumentVorlageWeitereSeitenAnzahlSpalten, DOKUMENT_VORLAGE_WEITERE_SEITEN_ANZAHL_SPALTEN_DEFAULT_VALUE);
  }

  public boolean isDocumentsCreatedPerStimmzettelgebiet() {
    return documentsCreatedPerStimmzettelgebiet;
  }

  public boolean isDocumentsCreatedPerStimmzettelgebietKompakt() {
    return documentsCreatedPerStimmzettelgebietKompakt;
  }

  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 hasDokumentVorlageGesamtergebnis() {
    return getDokumentVorlageGesamtergebnis() != null;
  }

  public DokumentVorlage getDokumentVorlageGesamtergebnis() {
    return dokumentVorlageGesamtergebnis;
  }

  public boolean hasDokumentVorlageStimmen() {
    return hasDokumentVorlageErsteSeiteDirektstimmen() || hasDokumentVorlageErsteSeiteListenstimmen() || hasDokumentVorlageWeitereSeitenDirektstimmen()
        || hasDokumentVorlageWeitereSeitenListenstimmen();
  }

  public boolean hasDokumentVorlageStimmzettel() {
    return hasDokumentVorlageErsteSeiteStimmzettel() || hasDokumentVorlageWeitereSeitenStimmzettel();
  }

  public boolean hasDokumentVorlageErsteSeiteDirektstimmen() {
    return getDokumentVorlageErsteSeiteDirektstimmen() != null;
  }

  public DokumentVorlage getDokumentVorlageErsteSeiteDirektstimmen() {
    return dokumentVorlageErsteSeiteDirektstimmen;
  }

  public boolean hasDokumentVorlageErsteSeiteListenstimmen() {
    return getDokumentVorlageErsteSeiteListenstimmen() != null;
  }

  public DokumentVorlage getDokumentVorlageErsteSeiteListenstimmen() {
    return dokumentVorlageErsteSeiteListenstimmen;
  }

  public boolean hasDokumentVorlageErsteSeiteStimmzettel() {
    return getDokumentVorlageErsteSeiteStimmzettel() != null;
  }

  public DokumentVorlage getDokumentVorlageErsteSeiteStimmzettel() {
    return dokumentVorlageErsteSeiteStimmzettel;
  }

  public int getDokumentVorlageErsteSeiteAnzahlSpalten() {
    return dokumentVorlageErsteSeiteAnzahlSpalten;
  }

  public boolean hasDokumentVorlageWeitereSeitenDirektstimmen() {
    return getDokumentVorlageWeitereSeitenDirektstimmen() != null;
  }

  public DokumentVorlage getDokumentVorlageWeitereSeitenDirektstimmen() {
    return dokumentVorlageWeitereSeitenDirektstimmen;
  }

  public boolean hasDokumentVorlageWeitereSeitenListenstimmen() {
    return getDokumentVorlageWeitereSeitenListenstimmen() != null;
  }

  public DokumentVorlage getDokumentVorlageWeitereSeitenListenstimmen() {
    return dokumentVorlageWeitereSeitenListenstimmen;
  }

  public boolean hasDokumentVorlageWeitereSeitenStimmzettel() {
    return getDokumentVorlageWeitereSeitenStimmzettel() != null;
  }

  public DokumentVorlage getDokumentVorlageWeitereSeitenStimmzettel() {
    return dokumentVorlageWeitereSeitenStimmzettel;
  }

  public int getDokumentVorlageWeitereSeitenAnzahlSpalten() {
    return dokumentVorlageWeitereSeitenAnzahlSpalten;
  }
}
