package client

import (
	apierrors "k8s.io/apimachinery/pkg/api/errors"
	"k8s.io/apimachinery/pkg/runtime/schema"
)

// Common errors that match K8s error patterns
var (
	// ErrAlreadyExists is returned when trying to create a resource that already exists
	ErrAlreadyExists = apierrors.NewAlreadyExists(schema.GroupResource{}, "")

	// ErrDeleteCond is returned when delete preconditions are not met
	ErrDeleteCond = apierrors.NewBadRequest("delete condition not met: resource must have deletion timestamp for force delete")

	// ErrTypeInvalid is returned when the object type is invalid
	ErrTypeInvalid = apierrors.NewBadRequest("invalid object type: must be a pointer")

	// ErrValueInvalid is returned when the object value is invalid
	ErrValueInvalid = apierrors.NewBadRequest("invalid object value: must be non-nil")

	// ErrObjkeyInvalid is returned when the object key is invalid
	ErrObjkeyInvalid = apierrors.NewBadRequest("invalid object key: name is required")
)

// NewNotFound creates a NotFound error for a specific resource
func NewNotFound(name string) error {
	return apierrors.NewNotFound(schema.GroupResource{
		Group:    "observability.pingcap.com",
		Resource: "clusters",
	}, name)
}

// NewAlreadyExists creates an AlreadyExists error for a specific resource
func NewAlreadyExists(name string) error {
	return apierrors.NewAlreadyExists(schema.GroupResource{
		Group:    "observability.pingcap.com",
		Resource: "clusters",
	}, name)
}

// NewConflict creates a Conflict error for a specific resource
func NewConflict(name string, err error) error {
	return apierrors.NewConflict(schema.GroupResource{
		Group:    "observability.pingcap.com",
		Resource: "clusters",
	}, name, err)
}

// NewInternalError creates an InternalError
func NewInternalError(err error) error {
	return apierrors.NewInternalError(err)
}

// NewBadRequest creates a BadRequest error
func NewBadRequest(reason string) error {
	return apierrors.NewBadRequest(reason)
}
