package router

import (
	"hash/fnv"

	"go.unistack.org/micro/v4/metadata"
)

var (
	// DefaultLink is default network link
	DefaultLink = "local"
	// DefaultLocalMetric is default route cost for a local route
	DefaultLocalMetric int64 = 1
)

// Route is network route
type Route struct {
	// Metadata for the route
	Metadata metadata.Metadata
	// Service is destination service name
	Service string
	// Gateway is route gateway
	Gateway string
	// Network is network address
	Network string
	// Router is router id
	Router string
	// Link is network link
	Link string
	// Address is service node address
	Address string
	// Metric is the route cost metric
	Metric int64
}

// Hash returns route hash sum.
func (r *Route) Hash() uint64 {
	h := fnv.New64()
	//nolint:errcheck
	h.Write([]byte(r.Service))
	//nolint:errcheck
	h.Write([]byte(r.Address))
	//nolint:errcheck
	h.Write([]byte(r.Gateway))
	//nolint:errcheck
	h.Write([]byte(r.Network))
	//nolint:errcheck
	h.Write([]byte(r.Router))
	//nolint:errcheck
	h.Write([]byte(r.Link))
	return h.Sum64()
}