package k8s

import (
	pacv1beta1 "github.com/cert-manager/aws-privateca-issuer/pkg/api/v1beta1"
	certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1"
	autoscalingv1beta1 "github.com/crossplane-contrib/provider-aws/apis/autoscaling/v1beta1"
	ec2v1alpha1 "github.com/crossplane-contrib/provider-aws/apis/ec2/v1alpha1"
	"github.com/crossplane-contrib/provider-aws/apis/eks/manualv1alpha1"
	crossplanev1alpha1 "github.com/crossplane-contrib/provider-aws/apis/iam/v1alpha1"
	"github.com/crossplane-contrib/provider-aws/apis/iam/v1beta1"
	awsdnsv1alpha1 "github.com/crossplane-contrib/provider-aws/apis/route53/v1alpha1"
	pcv1beta1 "github.com/crossplane-contrib/provider-aws/apis/v1beta1"
	brv1alpha1 "github.com/pingcap/tidb-operator/api/v2/br/v1alpha1"
	"github.com/pingcap/tidb-operator/api/v2/core/v1alpha1"
	storagev1 "github.com/tidbcloud/cluster-service-ng/pkg/k8s/api/storage/v1"
	schemav1 "github.com/tidbcloud/cluster-service-ng/pkg/storage/etcd/schema/v1"
	o11yv2 "github.com/tidbcloud/observability/agent-control-server/api/v2"
	coordinationv1 "k8s.io/api/coordination/v1"
	corev1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/runtime"
	clientgoscheme "k8s.io/client-go/kubernetes/scheme"
)

var scheme = runtime.NewScheme()

func init() {
	must(clientgoscheme.AddToScheme(scheme))
	must(schemav1.AddToScheme(scheme))
	must(v1alpha1.SchemeBuilder.AddToScheme(scheme))
	must(brv1alpha1.SchemeBuilder.AddToScheme(scheme))
	must(certmanagerv1.AddToScheme(scheme))
	must(coordinationv1.SchemeBuilder.AddToScheme(scheme))

	// todo: merge with schema with cloud resource pkg
	must(pcv1beta1.SchemeBuilder.AddToScheme(scheme))
	must(ec2v1alpha1.SchemeBuilder.AddToScheme(scheme))
	must(autoscalingv1beta1.SchemeBuilder.AddToScheme(scheme))
	must(manualv1alpha1.SchemeBuilder.AddToScheme(scheme))
	must(awsdnsv1alpha1.SchemeBuilder.AddToScheme(scheme))
	must(v1beta1.SchemeBuilder.AddToScheme(scheme))
	must(crossplanev1alpha1.SchemeBuilder.AddToScheme(scheme))
	must(corev1.SchemeBuilder.AddToScheme(scheme))
	must(o11yv2.AddToScheme(scheme))
	must(pacv1beta1.SchemeBuilder.AddToScheme(scheme))
	must(storagev1.AddToScheme(scheme))
}

func must(err error) {
	if err != nil {
		panic(err)
	}
}
