package k8sresource

import (
	"fmt"

	bizerr "github.com/tidbcloud/infra-provider/regional-server/pkg/common/errors"
	"k8s.io/apimachinery/pkg/api/meta"
	"k8s.io/apimachinery/pkg/runtime/schema"
)

func resolveNamespaced(mapper meta.RESTMapper, gvk schema.GroupVersionKind) (bool, error) {
	if mapper == nil {
		return false, bizerr.New(bizerr.K8SClientError, "RESTMapper is not available")
	}
	mapping, err := mapper.RESTMapping(gvk.GroupKind(), gvk.Version)
	if err != nil {
		return false, mapRESTMapperError(err, gvk.Group, gvk.Kind)
	}
	return mapping.Scope.Name() == meta.RESTScopeNameNamespace, nil
}

func mapRESTMapperError(err error, group, kind string) error {
	if meta.IsAmbiguousError(err) {
		return bizerr.New(bizerr.ParameterInvalid,
			fmt.Sprintf("ambiguous GVK for %s/%s: %v (hints: specify gvk.version explicitly)", group, kind, err))
	}
	if meta.IsNoMatchError(err) {
		return bizerr.New(bizerr.ParameterInvalid,
			fmt.Sprintf("GVK not found on cluster for %s/%s: %v", group, kind, err))
	}
	return bizerr.New(bizerr.K8SClientError, err.Error())
}
