package chanfitness

import (
	"time"

	"github.com/btcsuite/btcd/wire"
)

// peerMonitor is an interface implemented by entities that monitor our peers
// online events and the channels we currently have open with them.
type peerMonitor interface {
	// event adds an online or offline event.
	onlineEvent(online bool)

	// addChannel adds a new channel.
	addChannel(channelPoint wire.OutPoint) error

	// removeChannel removes a channel.
	removeChannel(channelPoint wire.OutPoint) error

	// channelCount returns the number of channels that we currently have
	// with the peer.
	channelCount() int

	// channelUptime looks up a channel and returns the amount of time that
	// the channel has been monitored for and its uptime over this period.
	channelUptime(channelPoint wire.OutPoint) (time.Duration,
		time.Duration, error)

	// getFlapCount returns the peer's flap count and the timestamp that we
	// last recorded a flap, which may be nil if we have never recorded a
	// flap for this peer.
	getFlapCount() (int, *time.Time)
}