package daemon

import (
	"context"
	"isle/daemon/jsonrpc2"

	"github.com/stretchr/testify/mock"
)

const metaKeyNetworkSearchStr = "daemon.networkSearchStr"

// WithNetwork returns the Context so that, when used against a daemon RPC
// endpoint, the endpoint knows which network is being targetted for the call.
// The network can be identified by its ID, name, or domain.
func WithNetwork(ctx context.Context, searchStr string) context.Context {
	return jsonrpc2.WithMeta(ctx, metaKeyNetworkSearchStr, searchStr)
}

func getNetworkSearchStr(ctx context.Context) string {
	v, _ := jsonrpc2.GetMeta(ctx)[metaKeyNetworkSearchStr].(string)
	return v
}

// MockContextWithNetwork returns a value which can be used with the
// tesstify/mock package to match a context which has a search string added to
// it by WithNetwork.
func MockContextWithNetwork(searchStr string) any {
	return mock.MatchedBy(func(ctx context.Context) bool {
		return getNetworkSearchStr(ctx) == searchStr
	})
}