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

import java.util.List;
import java.util.Map;

import javax.annotation.Nonnull;

import de.ivu.elect.business.ergebnis.entity.KumulierteStimmen;
import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebietPK;
import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebietUK;
import de.ivu.elect.jee.entity.Entity;
import de.ivu.elect.jee.entity.EntityContainer;
import de.ivu.elect.jee.entity.EntityFachlichAbhaengigNode;
import de.ivu.elect.jee.entity.tk.EntityTK;
import de.ivu.elect.jee.protokollierung.VorherNachherWert;

public class ReferendumOptionKumulierteStimmen implements KumulierteStimmen, Entity<GruppeImGebietPK, GruppeImGebietUK> {

  private static final long serialVersionUID = 1L;

  private final GruppeImGebiet gruppeImGebiet;

  private final long referendumOptionPosition;

  private final String gruppeBezeichnung;

  private final String bezeichnung;

  private final String kennung;

  private final Long anzahlStimmen;

  public ReferendumOptionKumulierteStimmen(@Nonnull ReferendumOption referendumOption, String gruppeBezeichnung, String bezeichnung, String kennung, Long anzahlStimmen) {
    this(referendumOption.getGruppeImGebiet(), referendumOption.getPosition(), gruppeBezeichnung, bezeichnung, kennung, anzahlStimmen);
  }

  public ReferendumOptionKumulierteStimmen(GruppeImGebiet gruppeImGebiet, long referendumOptionPosition, String gruppeBezeichnung, String bezeichnung, String kennung, Long anzahlStimmen) {
    super();

    this.gruppeImGebiet = gruppeImGebiet;
    this.referendumOptionPosition = referendumOptionPosition;
    this.gruppeBezeichnung = gruppeBezeichnung;
    this.bezeichnung = bezeichnung;
    this.kennung = kennung;
    this.anzahlStimmen = anzahlStimmen;
  }

  public boolean isSystemGruppe() {
    if (gruppeImGebiet == null) {
      return false;
    }

    return gruppeImGebiet.isSystemGruppe();
  }

  public Gruppe getGruppe() {
    if (gruppeImGebiet == null) {
      return null;
    }

    return gruppeImGebiet.getGruppe();
  }

  public GruppeImGebiet getGruppeImGebiet() {
    return gruppeImGebiet;
  }

  public String getGruppeBezeichnung() {
    return gruppeBezeichnung;
  }

  public String getBezeichnung() {
    return bezeichnung;
  }

  public String getKennung() {
    return kennung;
  }

  public Long getAnzahlStimmen() {
    return anzahlStimmen;
  }

  public long getReferendumOptionPosition() {
    return referendumOptionPosition;
  }

  @Override
  public GruppeImGebietPK getPk() {
    return getGruppeImGebiet().getPk();
  }

  @Override
  public Long getId() {
    return getPk().getId();
  }

  @Override
  public GruppeImGebietUK getUk() {
    return getGruppeImGebiet().getUk();
  }

  @Override
  public EntityTK getTk() {
    return getGruppeImGebiet().getTk();
  }

  @Override
  public Class< ? > getEntityClass() {
    throw new UnsupportedOperationException();
  }

  @Override
  public String getEntityTechnicalName() {
    throw new UnsupportedOperationException();
  }

  @Override
  public boolean isAenderungenProtokollieren() {
    return false;
  }

  @Override
  public Map<String, VorherNachherWert> getProtokollierteAttributeMitWerten() {
    throw new UnsupportedOperationException();
  }

  @Override
  public void resetProtokollierteAttribute() {
    throw new UnsupportedOperationException();
  }

  @Override
  public List<EntityFachlichAbhaengigNode> getFachlichAbhaengigeEntitaeten() {
    throw new UnsupportedOperationException();
  }

  @Override
  public boolean isInstanceOf(Class< ? > clazz) {
    return false;
  }

  @Override
  public <E> EntityContainer<E> castTo(Class<E> clazz) {
    throw new UnsupportedOperationException();
  }

  @Override
  public String getBaseClassName() {
    return getClass().getName();
  }

  @Override
  public void copyEntityAttributesToOtherEntity(Entity entity) {
    throw new UnsupportedOperationException();
  }

  @Override
  public void setProtokollierteAttributeMitWerten(Map map) {
    throw new UnsupportedOperationException();
  }
}
