package netmap

import (
	"testing"

	cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
	"github.com/stretchr/testify/require"
)

func BenchmarkNetmap_ContainerNodes(b *testing.B) {
	nodes := []NodeInfo{
		nodeInfoFromAttributes("Country", "Russia", "Order", "1"),
		nodeInfoFromAttributes("Country", "Germany", "Order", "2"),
		nodeInfoFromAttributes("Country", "Russia", "Order", "3"),
		nodeInfoFromAttributes("Country", "France", "Order", "4"),
		nodeInfoFromAttributes("Country", "France", "Order", "5"),
		nodeInfoFromAttributes("Country", "Russia", "Order", "6"),
		nodeInfoFromAttributes("Country", "Russia", "Order", "7"),
		nodeInfoFromAttributes("Country", "Germany", "Order", "8"),
		nodeInfoFromAttributes("Country", "Germany", "Order", "9"),
		nodeInfoFromAttributes("Country", "Russia", "Order", "10"),
		nodeInfoFromAttributes("Country", "China", "Order", "11"),
		nodeInfoFromAttributes("Country", "China", "Order", "12"),
		nodeInfoFromAttributes("Country", "Finland", "Order", "13"),
		nodeInfoFromAttributes("Country", "Finland", "Order", "14"),
		nodeInfoFromAttributes("Country", "España", "Order", "15"),
		nodeInfoFromAttributes("Country", "España", "Order", "16"),
	}

	var nm NetMap
	nm.SetNodes(nodes)

	policies := []string{
		`REP 2`,
		`REP 2 IN X CBF 2 SELECT 2 FROM * AS X`,
	}
	cnr := cidtest.ID()

	pivot := make([]byte, 32)
	cnr.Encode(pivot)

	for i := range policies {
		b.Run(policies[i], func(b *testing.B) {
			var p PlacementPolicy
			require.NoError(b, p.DecodeString(policies[i]))

			b.ResetTimer()
			b.ReportAllocs()

			for i := 0; i < b.N; i++ {
				_, err := nm.ContainerNodes(p, pivot)
				if err != nil {
					b.Fatal(err)
				}
			}

		})
	}
}