// Carnegie Mellon University
//   Information Networking Institute and
//   School of Computer Science
//
// Master Thesis: A Monitoring Tool for Overlay Network
// By: TungFai Chan and Annie Cheng
//
// File: JoinLeavePair.java
// Path: eventbase/neighbor
// Description: Element that record join, leave, reason to leave information

package eventbase.neighbor;

// Allow a member to leave and join multiple times
public class JoinLeavePair implements NeighborType {
  private double timeSinceNeighbor;
  private double timeCeaseNeighbor;
  private int reasonToLeave;

  public JoinLeavePair(double timeJoin) {
    timeSinceNeighbor = timeJoin;
    timeCeaseNeighbor = -1;
    reasonToLeave = UNKNOWN;
  }

  public static int getMemoroySize() {
    return 8 + 8 + 4; // timeSinceNeighbor + timeCeaseNeighbor + reasonToLeave
  }

  public void setTimeCeaseNeighbor(double timeLeave, int reason) {
    if (timeCeaseNeighbor == -1) {
      timeCeaseNeighbor = timeLeave;
      reasonToLeave = reason;
    }
    else {
      System.err.println("ERROR: JoinLeavePair::setTimeCeaseNeighbor()");
      System.err.println("       Attempt to overwrite exisiting value.");
    }
  }

  public double getTimeSinceNeighbor() {
    return timeSinceNeighbor;
  }

  public double getTimeCeaseNeighbor() {
    return timeCeaseNeighbor;
  }

  public int getReasonToLeave() {
    return reasonToLeave;
  }

  public boolean isComplete() {
    return (timeSinceNeighbor != -1 && timeCeaseNeighbor !=-1);
  }

  public void print() {
    System.out.print(" (" + timeSinceNeighbor +
                        ", " + timeCeaseNeighbor +
                        ", " + reasonToLeave + ")" );
  }
}

