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

import java.io.Serializable;

import de.ivu.elect.business.wahl.boundary.AbstractWahlDAO;
import de.ivu.elect.business.wahl.boundary.AbstractWahlterminDAO;

/**
 *  on 24.01.2017.
 */
public class WahlOderWahlterminPK implements Serializable {

  private final WahlterminPK wahlterminPK;

  private final WahlPK wahlPK;

  public WahlOderWahlterminPK(WahlPK wahlPK) {
    this.wahlterminPK = null;
    this.wahlPK = wahlPK;
  }

  public WahlOderWahlterminPK(WahlterminPK wahlterminPK) {
    this.wahlterminPK = wahlterminPK;
    this.wahlPK = null;
  }

  public boolean isWahlPK() {
    return wahlPK != null;
  }

  public WahlterminPK getWahlterminPK() {
    return wahlterminPK;
  }

  public WahlPK getWahlPK() {
    return wahlPK;
  }

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

    WahlOderWahlterminPK that = (WahlOderWahlterminPK) o;

    if (wahlterminPK != null ? !wahlterminPK.equals(that.wahlterminPK) : that.wahlterminPK != null) return false;
    return wahlPK != null ? wahlPK.equals(that.wahlPK) : that.wahlPK == null;
  }

  public WahlOderWahltermin getWahlOderWahltermin(AbstractWahlterminDAO wahlterminDAO, AbstractWahlDAO wahlDAO) {
    if (isWahlPK()) {
      return wahlDAO.findByPrimaryKey(getWahlPK());
    }
    return wahlterminDAO.findByPrimaryKey(getWahlterminPK());
  }

  @Override
  public int hashCode() {
    int result = wahlterminPK != null ? wahlterminPK.hashCode() : 0;
    result = 31 * result + (wahlPK != null ? wahlPK.hashCode() : 0);
    return result;
  }

  @Override
  public String toString() {
    return "WahlUndWahlterminPK{" +
        "wahlterminPK=" + wahlterminPK +
        ", wahlPK=" + wahlPK +
        '}';
  }
}
