package de.ivu.elect.sitzberechnung.osv.exchange.p22;

import java.util.Objects;

/**
 * Steht für eine P3-Liste (repräsentiert durch eine Gruppe), für eine P2-Liste (repräsentiert durch ein Stel oder eine Liste) oder für nichts.
 */
public class AllgemeineListe {
  private String gruppeKey;
  private String stelKey;
  private String listeKey;

  public AllgemeineListe() {
  }

  public AllgemeineListe(String gruppeKey, String stelKey, String listeKey) {
    this.gruppeKey = gruppeKey;
    this.stelKey = stelKey;
    this.listeKey = listeKey;
  }

  public static AllgemeineListe withGruppeKey(String gruppeKey) {
    return new AllgemeineListe(gruppeKey, null, null);
  }

  public static AllgemeineListe withStelKey(String stelKey) {
    return new AllgemeineListe(null, stelKey, null);
  }

  public static AllgemeineListe withListeKey(String listeKey) {
    return new AllgemeineListe(null, null, listeKey);
  }

  public String getGruppeKey() {
    return gruppeKey;
  }

  public void setGruppeKey(String gruppeKey) {
    this.gruppeKey = gruppeKey;
  }

  public String getStelKey() {
    return stelKey;
  }

  public void setStelKey(String stelKey) {
    this.stelKey = stelKey;
  }

  public String getListeKey() {
    return listeKey;
  }

  public void setListeKey(String listeKey) {
    this.listeKey = listeKey;
  }

  public boolean isGruppe() {
    return gruppeKey != null;
  }

  public boolean isStel() {
    return stelKey != null;
  }

  public boolean isListe() {
    return listeKey != null;
  }

  public boolean isNull() {
    return gruppeKey == null && stelKey == null && listeKey == null;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    AllgemeineListe that = (AllgemeineListe) o;
    return Objects.equals(gruppeKey, that.gruppeKey) &&
            Objects.equals(stelKey, that.stelKey) &&
            Objects.equals(listeKey, that.listeKey);
  }

  @Override
  public int hashCode() {
    return Objects.hash(gruppeKey, stelKey, listeKey);
  }

  @Override
  public String toString() {
    return "AllgemeineListe{" +
            "gruppeKey='" + gruppeKey + '\'' +
            ", stelKey='" + stelKey + '\'' +
            ", listeKey='" + listeKey + '\'' +
            '}';
  }
}
