
package de.ivu.elect.dokumente.ergebnistabelle;

import org.jsefa.csv.annotation.CsvField;

import de.ivu.elect.business.ergebnis.entity.Stimmabgabeart;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.core.exchange.stimmen.csv.AbstractStimmenCsvDTO;
import de.ivu.jsefa.CsvHeader;

public abstract class AbstractErgebnistabelleCsvDTO extends AbstractStimmenCsvDTO {

  // TODO: gehört eigentlich nicht ins CSV-DTO
  protected Gebiet gebiet;

  public static final int ERGEBNISTABELLE_ERSTE_POSITION = LETZTE_POSITION + 1;

  public static final int ERGEBNISTABELLE_LETZTE_POSITION = ERGEBNISTABELLE_ERSTE_POSITION + 1;

  @CsvField(pos = ERGEBNISTABELLE_ERSTE_POSITION)
  @CsvHeader("Stimmabgabeart")
  protected Stimmabgabeart stimmabgabeart;

  @CsvField(pos = ERGEBNISTABELLE_LETZTE_POSITION + 1)
  @CsvHeader("Zeilenart")
  protected ErgebnistabelleZeileArt zeileArt;

  public AbstractErgebnistabelleCsvDTO() {
    super();
  }

  public AbstractErgebnistabelleCsvDTO(AbstractErgebnistabelleZeilenSchluessel schluessel) {
    super();

    setGebiet(schluessel.getGebiet());
    setZeileArt(schluessel.getZeileArt());
    setStimmabgabeart(schluessel.getStimmabgabeart());
  }

  @Override
  public void setGebiet(Gebiet gebiet) {
    super.setGebiet(gebiet);

    this.gebiet = gebiet;
  }

  @Override
  public Gebiet getGebiet() {
    return gebiet;
  }

  public boolean isGesamt() {
    return Stimmabgabeart.GESAMT.equals(getStimmabgabeart());
  }

  public boolean isBriefwahl() {
    return Stimmabgabeart.BRIEF.equals(getStimmabgabeart());
  }

  public boolean isUrnenwahl() {
    return Stimmabgabeart.URNE.equals(getStimmabgabeart());
  }

  public Stimmabgabeart getStimmabgabeart() {
    return stimmabgabeart;
  }

  public void setStimmabgabeart(Stimmabgabeart stimmabgabeart) {
    this.stimmabgabeart = stimmabgabeart;
  }

  public boolean isSumme() {
    return ErgebnistabelleZeileArt.SUMME.equals(getZeileArt());
  }

  public ErgebnistabelleZeileArt getZeileArt() {
    return zeileArt;
  }

  public void setZeileArt(ErgebnistabelleZeileArt zeileArt) {
    this.zeileArt = zeileArt;
  }

  public boolean isCustom() {
    return zeileArt.isCustom();
  }
}
