
package de.ivu.elect.was.exchange.kerg;

import java.util.ArrayList;
import java.util.List;

import de.ivu.elect.business.ergebnis.control.ErgebnisDaten;
import de.ivu.elect.business.gruppe.entity.Gruppe;

public class HeaderKergGruppeContainer<G extends Gruppe> {

  private final G gruppe;

  private final boolean erstStimmenVorhanden;

  private final boolean zweitStimmenVorhanden;

  private final ErgebnisDaten ergebnisDaten;

  public HeaderKergGruppeContainer(ErgebnisDaten ergebnisDaten, G gruppe) {
    super();

    this.gruppe = gruppe;

    this.ergebnisDaten = ergebnisDaten;

    this.erstStimmenVorhanden = !ergebnisDaten.getDirektkandidaturen().isEmpty();
    this.zweitStimmenVorhanden = !ergebnisDaten.getListen().isEmpty();
  }

  public List<String> getHeaderErsteZeile() {
    List<String> result = new ArrayList<>();
    result.add(gruppe.getName());
    result.add("");

    if (erstStimmenVorhanden && zweitStimmenVorhanden) {
      result.add("");
      result.add("");
    }

    return result;
  }

  public List<String> getHeaderZweiteZeile() {
    List<String> result = new ArrayList<>();

    if (erstStimmenVorhanden && zweitStimmenVorhanden) {
      result.add("Erststimmen");
      result.add("");
      result.add("Zweitstimmen");
      result.add("");
    } else if (erstStimmenVorhanden || zweitStimmenVorhanden) {
      result.add("Stimmen");
      result.add("");
    }

    return result;
  }

  public List<String> getHeaderDritteZeile() {
    List<String> result = new ArrayList<>();

    if (erstStimmenVorhanden) {
      if (ergebnisDaten.getErgebnis().isEndgueltig()) {
        result.add("Endgültig");
      } else {
        result.add("Vorläufig");
      }

      result.add("Vorperiode");
    }

    if (zweitStimmenVorhanden) {
      if (ergebnisDaten.getErgebnis().isEndgueltig()) {
        result.add("Endgültig");
      } else {
        result.add("Vorläufig");
      }

      result.add("Vorperiode");
    }

    return result;
  }

  protected boolean isErstStimmenVorhanden() {
    return erstStimmenVorhanden;
  }

  protected boolean isZweitStimmenVorhanden() {
    return zweitStimmenVorhanden;
  }

  protected G getGruppe() {
    return gruppe;
  }

  protected ErgebnisDaten getErgebnisDaten() {
    return ergebnisDaten;
  }
}
