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

import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.wahlvorschlag.boundary.AbstractWahlvorschlagDAO;
import de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagPK;

import java.io.Serializable;

public class P2Liste implements Serializable {
  private static final long serialVersionUID = 1L;

  private OsvLegacyStel stel;
  private WahlvorschlagPK liste;

  public P2Liste(OsvLegacyStel stel) {
    this.stel = stel;
  }

  public P2Liste(WahlvorschlagPK liste) {
    this.liste = liste;
  }

  public OsvLegacyStel getStel() {
    return stel;
  }

  public WahlvorschlagPK getListe() {
    return liste;
  }

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

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

  public Gruppe getGruppe(AbstractWahlvorschlagDAO wahlvorschlagDAO) {
    return isStel() ? wahlvorschlagDAO.findByPrimaryKey(getStel().getListenDesStels().iterator().next()).getGruppe() :
            isListe() ? wahlvorschlagDAO.findByPrimaryKey(getListe()).getGruppe() : null;
  }

  @Override
  public String toString() {
    return stel != null ? stel.toString() : liste.toString();
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof P2Liste)) return false;

    P2Liste p2Liste = (P2Liste) o;

    if (isStel() ? !getStel().equals(p2Liste.getStel()) : p2Liste.getStel() != null) {
      return false;
    }
    return isListe() ? getListe().equals(p2Liste.getListe()) : p2Liste.getListe() == null;
  }

  @Override
  public int hashCode() {
    return isStel() ? getStel().hashCode() :
            isListe() ? getListe().hashCode() : 0;
  }
}
