# Source: src/main/js/daemon/model/MoneroPeer.js

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

    /**
     * Models a peer to the daemon.
     */
    class MoneroPeer {

      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;
      }

        getId() {
        return this.state.id;
      }

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

      getAvgDownload() {
        return this.state.avgDownload;
      }

      setAvgDownload(avgDownload) {
        this.state.avgDownload = avgDownload;
        return this;
      }

      getAvgUpload() {
        return this.state.avgUpload;
      }

      setAvgUpload(avgUpload) {
        this.state.avgUpload = avgUpload;
        return this;
      }

      getCurrentDownload() {
        return this.state.currentDownload;
      }

      setCurrentDownload(currentDownload) {
        this.state.currentDownload = currentDownload;
        return this;
      }

      getCurrentUpload() {
        return this.state.currentUpload;
      }

      setCurrentUpload(currentUpload) {
        this.state.currentUpload = currentUpload;
        return this;
      }

      getHeight() {
        return this.state.height;
      }

      setHeight(height) {
        this.state.height = height;
        return this;
      }

      isIncoming() {
        return this.state.isIncoming;
      }

      setIsIncoming(isIncoming) {
        this.state.isIncoming = isIncoming;
        return this;
      }

      getLiveTime() {
        return this.state.liveTime;
      }

      setLiveTime(liveTime) {
        this.state.liveTime = liveTime;
        return this;
      }

      isLocalIp() {
        return this.state.isLocalIp;
      }

      setIsLocalIp(isLocalIp) {
        this.state.isLocalIp = isLocalIp;
        return this;
      }

      isLocalHost() {
        return this.state.isLocalHost;
      }

      setIsLocalHost(isLocalHost) {
        this.state.isLocalHost = isLocalHost;
        return this;
      }

      getNumReceives() {
        return this.state.numReceives;
      }

      setNumReceives(numReceives) {
        this.state.numReceives = numReceives;
        return this;
      }

      getNumSends() {
        return this.state.numSends;
      }

      setNumSends(numSends) {
        this.state.numSends = numSends;
        return this;
      }

      getReceiveIdleTime() {
        return this.state.receiveIdleTime;
      }

      setReceiveIdleTime(receiveIdleTime) {
        this.state.receiveIdleTime = receiveIdleTime;
        return this;
      }

      getSendIdleTime() {
        return this.state.sendIdleTime;
      }

      setSendIdleTime(sendIdleTime) {
        this.state.sendIdleTime = sendIdleTime;
        return this;
      }

      getState() {
        return this.state.state;
      }

      setState(state) {
        this.state.state = state;
        return this;
      }

      getNumSupportFlags() {
        return this.state.numSupportFlags;
      }

      setNumSupportFlags(numSupportFlags) {
        this.state.numSupportFlags = numSupportFlags;
        return this;
      }

      getType() {
        return this.state.type;
      }

      setType(type) {
        this.state.type = type;
        return this;
      }
    }

    module.exports = MoneroPeer;