
package de.ivu.elect.interfaces.core;

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

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;

@XmlAccessorType(XmlAccessType.FIELD)
public class GruppeImGebiet implements Serializable {

  private static final long serialVersionUID = 1L;

  @XmlElement(required = true)
  private GruppeImGebietReferenz gruppeImGebietReferenz;

  @XmlElement(required = false)
  private String name;

  @XmlElement(required = false)
  private String kurzname;

  @XmlElement(required = false)
  private String zusatzbezeichnung;

  // War mal die finale Stimmzettelposition, jetzt relative und vorgegebene Position verwende
  // Hilfe für das WAS, Position aus WUS wird übernommen...
  @XmlElement(required = false)
  private Long position;

  @XmlElement(required = false)
  private Long vorgegebenePosition;

  @XmlElement(required = false) // abwärtskompatibilität
  private Long relativePosition = null;

  @XmlElement(required = false)
  private Long eingereichtePosition = null;

  @Deprecated // wird berechnet
  @XmlElement(required = false)
  private GruppeImGebietStatus status;

  @XmlElementWrapper(name = "stimmergebnis", nillable = false, required = false)
  @XmlElement(required = false, name = "stimmen", nillable = true)
  private List<Stimmen> stimmergebnis = new ArrayList<>();

  @XmlElement(required = true)
  private String customData;

  @Deprecated
  public GruppeImGebietStatus getStatus() {
    return status;
  }

  @Deprecated
  public void setStatus(GruppeImGebietStatus status) {
    this.status = status;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getKurzname() {
    return kurzname;
  }

  public void setKurzname(String kurzname) {
    this.kurzname = kurzname;
  }

  // Berechnte Stimmzettelposition für das WAS
  public Long getPosition() {
    return position;
  }

  // Berechnte Stimmzettelposition für das WAS
  public void setPosition(Long position) {
    this.position = position;
  }

  public String getCustomData() {
    return customData;
  }

  public void setCustomData(String customData) {
    this.customData = customData;
  }

  public GruppeImGebietReferenz getGruppeImGebietReferenz() {
    return gruppeImGebietReferenz;
  }

  public void setGruppeImGebietReferenz(GruppeImGebietReferenz gruppeImGebietReferenz) {
    this.gruppeImGebietReferenz = gruppeImGebietReferenz;
  }

  public List<Stimmen> getStimmergebnis() {
    return stimmergebnis;
  }

  public void setStimmergebnis(List<Stimmen> stimmergebnis) {
    this.stimmergebnis = stimmergebnis;
  }

  public Long getVorgegebenePosition() {
    return vorgegebenePosition;
  }

  public void setVorgegebenePosition(Long vorgegebenePosition) {
    this.vorgegebenePosition = vorgegebenePosition;
  }

  public Long getEingereichtePosition() {
    return eingereichtePosition;
  }

  public void setEingereichtePosition(Long eingereichtePosition) {
    this.eingereichtePosition = eingereichtePosition;
  }

  public Long getRelativePosition() {
    return relativePosition;
  }

  public void setRelativePosition(Long relativePosition) {
    this.relativePosition = relativePosition;
  }

  public String getZusatzbezeichnung() {
    return zusatzbezeichnung;
  }

  public void setZusatzbezeichnung(String zusatzbezeichnung) {
    this.zusatzbezeichnung = zusatzbezeichnung;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }

    GruppeImGebiet that = (GruppeImGebiet) o;

    if (!gruppeImGebietReferenz.equals(that.gruppeImGebietReferenz)) {
      return false;
    }

    return true;
  }

  @Override
  public int hashCode() {
    return gruppeImGebietReferenz.hashCode();
  }
}
