package status

import (
	"github.com/google/go-cmp/cmp"
	"github.com/google/go-cmp/cmp/cmpopts"

	"edge-infra.dev/pkg/edge/api/graph/model"
)

// StatusesEqual performs a deep comparison of two slices of VirtualMachineStatus objects,
// including their Conditions
func StatusesEqual(statuses1, statuses2 []*model.VirtualMachineStatus) bool {
	return cmp.Equal(
		statuses1,
		statuses2,
		cmpopts.SortSlices(func(s1, s2 *model.VirtualMachineStatus) bool {
			if s1.Name != s2.Name {
				return s1.Name < s2.Name
			}
			if s1.Namespace != s2.Namespace {
				return s1.Namespace < s2.Namespace
			}
			return s1.ClusterEdgeID < s2.ClusterEdgeID
		}),
		cmpopts.SortSlices(func(c1, c2 *model.ObjStatusCondition) bool {
			return c1.Type < c2.Type
		}),
		cmpopts.EquateEmpty(),
	)
}