
package de.ivu.elect.presentation.ergebnis.exchange;

import java.io.Serializable;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.dokumente.boundary.DokumentVorlageExtendedDAO;
import de.ivu.elect.business.dokumente.entity.DokumentVorlage;
import de.ivu.elect.business.dokumente.entity.DokumentVorlageArt;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.presentation.dokumente.DokumentVorlageProperty;

public class ErgebnisGesamtergebnisTabellarischDocumentExportViewDokumentVorlagenProperties implements Serializable {

  private static final long serialVersionUID = 1L;

  private static final String LABEL_MSG_KEY_PREFIX = "ergebnis.gesamtergebnis.tabellarisch.exportieren.dokument.vorlage.property.label.";

  @Inject
  private transient DokumentVorlageExtendedDAO dokumentVorlageExtendedDAO;

  private DokumentVorlageProperty dokumentVorlagePropertyGesamtergebnis;

  private DokumentVorlageProperty dokumentVorlagePropertyErsteSeiteDirektstimmen;

  private DokumentVorlageProperty dokumentVorlagePropertyWeitereSeitenDirektstimmen;

  private DokumentVorlageProperty dokumentVorlagePropertyErsteSeiteListenstimmen;

  private DokumentVorlageProperty dokumentVorlagePropertyWeitereSeitenListenstimmen;

  public ErgebnisGesamtergebnisTabellarischDocumentExportViewDokumentVorlagenProperties() {
    super();
  }

  public DokumentVorlageProperty getDokumentVorlagePropertyGesamtergebnis(Wahl wahl, DokumentVorlageArt dokumentVorlageArt) {
    if (dokumentVorlagePropertyGesamtergebnis == null) {
      dokumentVorlagePropertyGesamtergebnis = new DokumentVorlageProperty(LABEL_MSG_KEY_PREFIX + "gesamtergebnis", getDokumentVorlagen(wahl, dokumentVorlageArt));
    }

    return dokumentVorlagePropertyGesamtergebnis;
  }

  public DokumentVorlageProperty getDokumentVorlagePropertyErsteSeiteDirektstimmen(Wahl wahl, DokumentVorlageArt dokumentVorlageArt) {
    if (dokumentVorlagePropertyErsteSeiteDirektstimmen == null) {
      String lableMsgKeyStimmenartInfix = "erststimmen";

      if (!wahl.isWahlMitListengebieten()) {
        lableMsgKeyStimmenartInfix = "stimmen";
      }

      dokumentVorlagePropertyErsteSeiteDirektstimmen = new DokumentVorlageProperty(LABEL_MSG_KEY_PREFIX + lableMsgKeyStimmenartInfix + ".erste.seite", getDokumentVorlagen(wahl, dokumentVorlageArt));
    }

    return dokumentVorlagePropertyErsteSeiteDirektstimmen;
  }

  public DokumentVorlageProperty getDokumentVorlagePropertyWeitereSeitenDirektstimmen(Wahl wahl, DokumentVorlageArt dokumentVorlageArt) {
    if (dokumentVorlagePropertyWeitereSeitenDirektstimmen == null) {
      String lableMsgKeyStimmenartInfix = "erststimmen";

      if (!wahl.isWahlMitListengebieten()) {
        lableMsgKeyStimmenartInfix = "stimmen";
      }

      dokumentVorlagePropertyWeitereSeitenDirektstimmen = new DokumentVorlageProperty(LABEL_MSG_KEY_PREFIX + lableMsgKeyStimmenartInfix + ".andere.seiten",
          getDokumentVorlagen(wahl, dokumentVorlageArt));
    }

    return dokumentVorlagePropertyWeitereSeitenDirektstimmen;
  }

  public DokumentVorlageProperty getDokumentVorlagePropertyErsteSeiteListenstimmen(Wahl wahl, DokumentVorlageArt dokumentVorlageArt) {
    if (dokumentVorlagePropertyErsteSeiteListenstimmen == null) {
      String lableMsgKeyStimmenartInfix = "zweitstimmen";

      if (!wahl.isWahlMitDirektkandidatengebieten()) {
        lableMsgKeyStimmenartInfix = "stimmen";
      }

      dokumentVorlagePropertyErsteSeiteListenstimmen = new DokumentVorlageProperty(LABEL_MSG_KEY_PREFIX + lableMsgKeyStimmenartInfix + ".erste.seite", getDokumentVorlagen(wahl, dokumentVorlageArt));
    }

    return dokumentVorlagePropertyErsteSeiteListenstimmen;
  }

  public DokumentVorlageProperty getDokumentVorlagePropertyWeitereSeitenListenstimmen(Wahl wahl, DokumentVorlageArt dokumentVorlageArt) {
    if (dokumentVorlagePropertyWeitereSeitenListenstimmen == null) {
      String lableMsgKeyStimmenartInfix = "zweitstimmen";

      if (!wahl.isWahlMitDirektkandidatengebieten()) {
        lableMsgKeyStimmenartInfix = "stimmen";
      }

      dokumentVorlagePropertyWeitereSeitenListenstimmen = new DokumentVorlageProperty(LABEL_MSG_KEY_PREFIX + lableMsgKeyStimmenartInfix + ".andere.seiten",
          getDokumentVorlagen(wahl, dokumentVorlageArt));
    }

    return dokumentVorlagePropertyWeitereSeitenListenstimmen;
  }

  private List<DokumentVorlage> getDokumentVorlagen(Wahl wahl, DokumentVorlageArt dokumentVorlageArt) {
    return dokumentVorlageExtendedDAO.findByWahlAndArtOrderByName(wahl, dokumentVorlageArt);
  }

  public void reset() {
    dokumentVorlagePropertyGesamtergebnis = null;

    dokumentVorlagePropertyErsteSeiteDirektstimmen = null;
    dokumentVorlagePropertyErsteSeiteListenstimmen = null;

    dokumentVorlagePropertyWeitereSeitenDirektstimmen = null;
    dokumentVorlagePropertyWeitereSeitenListenstimmen = null;
  }
}
