Source: src/main/js/daemon/model/MoneroDaemonPeer.js

const BigInteger = require("../../common/biginteger").BigInteger;

/**
 * Models a peer to the daemon.
 */
class MoneroDaemonPeer {
  
  constructor(state) {
    this.state = Object.assign({}, state);
    if (this.state.rpcCreditsPerHash !== undefined && !(this.state.rpcCreditsPerHash instanceof BigInteger)) this.state.rpcCreditsPerHash = BigInteger.parse(this.state.rpcCreditsPerHash);
  }
  
  toJson() {
    let json = Object.assign({}, this.state);
    if (json.rpcCreditsPerHash) json.rpcCreditsPerHash = json.rpcCreditsPerHash.toString();
    return json;
  }
  
  getId() {
    return this.state.id;
  }

  setId(id) {
    this.state.id = id;
    return this;
  }

  getAddress() {
    return this.state.address;
  }

  setAddress(address) {
    this.state.address = address;
    return this;
  }

  getHost() {
    return this.state.host;
  }

  setHost(host) {
    this.state.host = host;
    return this;
  }

  getPort() {
    return this.state.port;
  }

  setPort(port) {
    this.state.port = port;
    return this;
  }
  
  /**
   * Indicates if the peer was online when last checked (aka "white listed" as
   * opposed to "gray listed").
   * 
   * @return {boolean} true if peer was online when last checked, false otherwise
   */
  isOnline() {
    return this.state.isOnline;
  }
  
  setIsOnline(isOnline) {
    this.state.isOnline = isOnline;
    return this;
  }
  
  getLastSeenTimestamp() {
    return this.state.lastSeenTimestamp;
  }
  
  setLastSeenTimestamp(lastSeenTimestamp) {
    this.state.lastSeenTimestamp = lastSeenTimestamp;
    return this;
  }
  
  getPruningSeed() {
    return this.state.pruningSeed;
  }
  
  setPruningSeed(pruningSeed) {
    this.state.pruningSeed = pruningSeed;
    return this;
  }
  
  getRpcPort() {
    return this.state.rpcPort;
  }

  setRpcPort(rpcPort) {
    this.state.rpcPort = rpcPort;
    return this;
  }
  
  getRpcCreditsPerHash() {
    return this.state.rpcCreditsPerHash;
  }
  
  setRpcCreditsPerHash(rpcCreditsPerHash) {
    this.state.rpcCreditsPerHash = rpcCreditsPerHash;
    return this;
  }
}

module.exports = MoneroDaemonPeer;