package k8s

import (
	"k8s.io/apimachinery/pkg/runtime"
	clientgoscheme "k8s.io/client-go/kubernetes/scheme"

	"github.com/cert-manager/aws-privateca-issuer/pkg/api/v1beta1"
	chaosmeshv1alpha1 "github.com/chaos-mesh/chaos-mesh/api/v1alpha1"
	v1 "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1"
	"github.com/jetstack/cert-manager/pkg/apis/certmanager/v1alpha2"
	apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
)

func ChaosServerScheme() (*runtime.Scheme, error) {
	scheme := runtime.NewScheme()
	for _, f := range []func(s *runtime.Scheme) error{
		clientgoscheme.AddToScheme,
		v1.AddToScheme,       // Required by certificates
		v1beta1.AddToScheme,  // Required by AWS PCA issuer
		v1alpha2.AddToScheme, // Required by CertManager
		chaosmeshv1alpha1.AddToScheme,
		apiextensionsv1.AddToScheme,
	} {
		if err := f(scheme); err != nil {
			return nil, err
		}
	}
	return scheme, nil
}
