package vector_agent

import (
	"context"

	"github.com/pingcap/errors"
	corev1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/api/resource"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	client "sigs.k8s.io/controller-runtime/pkg/client"
	"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
)

func CreatePVC(ctx context.Context, cli client.Client, name, namespace, storageClassName string) error {
	storage := resource.MustParse("2Gi")
	pvc := &corev1.PersistentVolumeClaim{
		ObjectMeta: metav1.ObjectMeta{
			Name:      name,
			Namespace: namespace,
		},
		Spec: corev1.PersistentVolumeClaimSpec{
			StorageClassName: &storageClassName,
			AccessModes: []corev1.PersistentVolumeAccessMode{
				corev1.ReadWriteOnce,
			},
			Resources: corev1.VolumeResourceRequirements{
				Requests: corev1.ResourceList{
					corev1.ResourceStorage: storage,
				},
			},
		},
	}

	if _, err := controllerutil.CreateOrUpdate(ctx, cli, pvc, func() error {
		pvc.Spec.Resources.Requests[corev1.ResourceStorage] = storage
		return nil
	}); err != nil {
		return errors.Annotate(err, "failed to create or update vector pvc")
	}

	return nil
}
