package testkits

import (
	vmoperatorv1beta1 "github.com/VictoriaMetrics/operator/api/operator/v1beta1"
	autoscalingv1beta1 "github.com/crossplane-contrib/provider-aws/apis/autoscaling/v1beta1"
	ec2v1alpha1 "github.com/crossplane-contrib/provider-aws/apis/ec2/v1alpha1"
	eksv1alpha1 "github.com/crossplane-contrib/provider-aws/apis/eks/manualv1alpha1"
	gkecontainerv1beta1 "github.com/crossplane-contrib/provider-gcp/apis/container/v1beta1"
	ackv1alpha1 "github.com/crossplane-contrib/provider-upjet-alibabacloud/apis/ack/v1alpha1"
	aliplv1alpha1 "github.com/crossplane-contrib/provider-upjet-alibabacloud/apis/privatelink/v1alpha1"
	ec2v1beta1 "github.com/upbound/provider-aws/apis/ec2/v1beta1"
	upboundeksv1beta2 "github.com/upbound/provider-aws/apis/eks/v1beta2"
	azureksv1beta1 "github.com/upbound/provider-azure/apis/containerservice/v1beta1"
	azurenetworkv1beta2 "github.com/upbound/provider-azure/apis/network/v1beta2"
	appsv1 "k8s.io/api/apps/v1"
	corev1 "k8s.io/api/core/v1"
	rbacv1 "k8s.io/api/rbac/v1"
	schedulingv1 "k8s.io/api/scheduling/v1"
	storagev1 "k8s.io/api/storage/v1"
	"k8s.io/apimachinery/pkg/runtime"

	clusterserverv1 "github.com/tidbcloud/observability/agent-control-server/api/clusterserver/v1"
	rsv1alpha1 "github.com/tidbcloud/observability/agent-control-server/api/regionalserver/v1alpha1"
	agentv2 "github.com/tidbcloud/observability/agent-control-server/api/v2"
)

// Scheme returns a runtime.Scheme with all necessary types registered for testing.
func Scheme() *runtime.Scheme {
	scheme := runtime.NewScheme()
	_ = agentv2.AddToScheme(scheme)
	_ = corev1.AddToScheme(scheme)
	_ = appsv1.AddToScheme(scheme)
	_ = rbacv1.AddToScheme(scheme)
	_ = vmoperatorv1beta1.AddToScheme(scheme)
	_ = aliplv1alpha1.SchemeBuilder.AddToScheme(scheme)
	_ = autoscalingv1beta1.SchemeBuilder.AddToScheme(scheme)
	_ = ec2v1beta1.SchemeBuilder.AddToScheme(scheme)
	_ = gkecontainerv1beta1.SchemeBuilder.AddToScheme(scheme)
	_ = eksv1alpha1.SchemeBuilder.AddToScheme(scheme)
	_ = upboundeksv1beta2.SchemeBuilder.AddToScheme(scheme)
	_ = rsv1alpha1.SchemeBuilder.AddToScheme(scheme)
	_ = storagev1.AddToScheme(scheme)
	_ = schedulingv1.AddToScheme(scheme)
	_ = ec2v1alpha1.SchemeBuilder.AddToScheme(scheme)
	_ = ackv1alpha1.SchemeBuilder.AddToScheme(scheme)
	_ = clusterserverv1.AddToScheme(scheme)
	_ = azurenetworkv1beta2.SchemeBuilder.AddToScheme(scheme)
	_ = azureksv1beta1.SchemeBuilder.AddToScheme(scheme)
	return scheme
}
