package client

import (
	"fmt"
	"strings"

	"sigs.k8s.io/controller-runtime/pkg/client"

	"edge-infra.dev/pkg/k8s/meta"
)

// ObjectKeyFromRefStr creates an object reference that can be passed to
// client operations such as Get() from a standard K8s namespaced reference string
// in the format namespace/name
func ObjectKeyFromRefStr(s string) (client.ObjectKey, error) {
	tokens := strings.Split(s, "/")
	if len(tokens) != 2 || tokens[0] == "" || tokens[1] == "" {
		return client.ObjectKey{}, fmt.Errorf("invalid object ref string %s, should be in the format of name/namespace", s)
	}
	return client.ObjectKey{Namespace: tokens[0], Name: tokens[1]}, nil
}

// ObjectKeyFromRef is a convenience function for creating an object key from
// a namespaced object reference.
func ObjectKeyFromRef(ref meta.NamespacedObjectReference) client.ObjectKey {
	return client.ObjectKey{Name: ref.Name, Namespace: ref.Namespace}
}

// ObjectKeyFromObject returns the ObjectKey given a runtime.Object.
func ObjectKeyFromObject(obj client.Object) client.ObjectKey {
	return client.ObjectKey{Namespace: obj.GetNamespace(), Name: obj.GetName()}
}