/**
 * Default wallet listener which takes no action on notifications.
 */
class MoneroWalletListener {
  
  /**
   * Invoked as the wallet is synchronized.
   * 
   * @param {number} height - height of the synced block 
   * @param {number} startHeight - starting height of the sync request
   * @param {number} endHeight - ending height of the sync request
   * @param {number} percentDone - sync progress as a percentage
   * @param {string} message - human-readable description of the current progress
   */
  async onSyncProgress(height, startHeight, endHeight, percentDone, message) { }

  /**
   * Invoked when a new block is added to the chain.
   * 
   * @param {int} height - the height of the new block (i.e. the number of blocks before it).
   */
  async onNewBlock(height) { }
  
  /**
   * Invoked when the wallet's balances change.
   * 
   * @param {BigInteger} newBalance - new wallet balance
   * @param {BigInteger} newUnlockedBalance - new unlocked wallet balance
   */
  async onBalancesChanged(newBalance, newUnlockedBalance) { }

  /**
   * Invoked 3 times per received output: once when unconfirmed, once when confirmed, and
   * once when unlocked.
   * 
   * The notified output includes basic fields only, so the output or its transaction should be fetched to get all available fields.
   * 
   * @param {MoneroOutputWallet} output - the received output
   */
  async onOutputReceived(output) { }
  
  /**
   * Invoked twice per spent output: once when confirmed and once when unlocked.
   * 
   * The notified output includes basic fields only, so the output or its transaction should be fetched to get all available fields.
   * 
   * @param {MoneroOutputWallet} output - the spent output
   */
  async onOutputSpent(output) { }
}

module.exports = MoneroWalletListener;