package rpc

import (
	"github.com/kaspanet/kaspad/rpc/model"
)

// handleGetConnectedPeerInfo implements the getConnectedPeerInfo command.
func handleGetConnectedPeerInfo(s *Server, cmd interface{}, closeChan <-chan struct{}) (interface{}, error) {
	peers := s.protocolManager.Peers()
	infos := make([]*model.GetConnectedPeerInfoResult, 0, len(peers))
	for _, peer := range peers {
		info := &model.GetConnectedPeerInfoResult{
			ID:                        peer.ID().String(),
			Address:                   peer.Address(),
			LastPingDuration:          peer.LastPingDuration().Milliseconds(),
			SelectedTipHash:           peer.SelectedTipHash().String(),
			IsSyncNode:                peer == s.protocolManager.IBDPeer(),
			IsOutbound:                peer.IsOutbound(),
			TimeOffset:                peer.TimeOffset().Milliseconds(),
			UserAgent:                 peer.UserAgent(),
			AdvertisedProtocolVersion: peer.AdvertisedProtocolVersion(),
			TimeConnected:             peer.TimeConnected().Milliseconds(),
		}
		infos = append(infos, info)
	}
	return infos, nil
}