
package de.ivu.elect.business.gruppe.entity;

import java.util.Collections;

import javax.annotation.Nullable;

import de.ivu.elect.business.ergebnis.entity.Stimmenart;
import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDaten;

public class KopfzahlKumulierteStimmen extends GruppeKumulierteStimmen {

  private static final long serialVersionUID = 1L;

  private final Stimmenart stimmenart;

  private String bezeichnung = null;

  private Long position = null;

  private Long anzahl = null;

  private Double anteilUngerundet = null;

  private String anteilTooltip;

  private Long anzahlVorperiode = null;

  private Double anteilVorperiodeUngerundet = null;

  private String anteilVorperiodeTooltip;

  public KopfzahlKumulierteStimmen(EntityAufStimmzettelDaten entityAufStimmzettelDaten, SystemGruppeEigenschaften systemGruppeEigenschaften, GruppeImGebiet gruppeImGebiet, Stimmenart stimmenart,
      @Nullable Long anzahlDirektstimmen, @Nullable Long anzahlListenstimmen) {
    super(entityAufStimmzettelDaten, systemGruppeEigenschaften, gruppeImGebiet, anzahlDirektstimmen, anzahlListenstimmen, null, null, null, Collections.emptyMap()
    /*nicht notwendig, da Systemgruppen*/);

    this.stimmenart = stimmenart;
  }

  public String getBezeichnung() {
    if (bezeichnung == null) {
      return getGruppeImGebiet().getNameAufGebiet();
    }

    return bezeichnung;
  }

  public void setBezeichnung(String bezeichnung) {
    this.bezeichnung = bezeichnung;
  }

  @Override
  public Long getPosition() {
    if (position == null) {
      return getGruppeImGebiet().getRelativePositionAbgeleitet();
    }

    return position;
  }

  @Override
  public void setPosition(Long position) {
    this.position = position;
  }

  public Long getAnzahl() {
    return anzahl;
  }

  public void setAnzahl(@Nullable Long anzahl) {
    this.anzahl = anzahl;
  }

  public Long getAnzahlVorperiode() {
    return anzahlVorperiode;
  }

  public void setAnzahlVorperiode(Long anzahlVorperiode) {
    this.anzahlVorperiode = anzahlVorperiode;
  }

  public Double getAnteil() {
    return rundeAufFixeAnzahlNachkommastellen(getAnteilUngerundet());
  }

  public Double getAnteilUngerundet() {
    return anteilUngerundet;
  }

  public void setAnteilUngerundet(Double anteilUngerundet) {
    this.anteilUngerundet = anteilUngerundet;
  }

  public String getAnteilTooltip() {
    return anteilTooltip;
  }

  public void setAnteilTooltip(String anteilTooltip) {
    this.anteilTooltip = anteilTooltip;
  }

  public Double getAnteilVorperiode() {
    return rundeAufFixeAnzahlNachkommastellen(getAnteilVorperiodeUngerundet());
  }

  public Double getAnteilVorperiodeUngerundet() {
    return anteilVorperiodeUngerundet;
  }

  public void setAnteilVorperiodeUngerundet(Double anteilVorperiodeUngerundet) {
    this.anteilVorperiodeUngerundet = anteilVorperiodeUngerundet;
  }

  public String getAnteilVorperiodeTooltip() {
    return anteilVorperiodeTooltip;
  }

  public void setAnteilVorperiodeTooltip(String anteilVorperiodeTooltip) {
    this.anteilVorperiodeTooltip = anteilVorperiodeTooltip;
  }

  public Double getAnteilDifferenz() {
    // WASDE-602.
    if (isSystemGruppeWaehler()) {
      return rundeAufFixeAnzahlNachkommastellen(differenz(getAnteilUngerundet(), getAnteilVorperiodeUngerundet()));
    }

    return null;
  }

  public Stimmenart getStimmenart() {
    return stimmenart;
  }
}
