// Package service add by blacknc <blacknc@163.com> at 2024/12/25 18:11:49
package service

import (
	"context"
	"strconv"
	"tcidm/commons/client"
	"tcidm/metrics"
	"time"

	"github.com/tidbcloud/eks-provider/api/v1alpha1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/types"
)

func GetPrivateLinkEndpointCR(ctx context.Context, namespace, name string) (*v1alpha1.PrivateLinkEndpoint, error) {
	ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
	defer cancel()

	var err error
	startTime := time.Now()
	defer func() {
		cost := time.Since(startTime).Milliseconds()
		ok := strconv.FormatBool(err == nil)
		metrics.DownstreamRequestDuration.WithLabelValues("regional-k8s-apiserver", "get_privatelinkendpoint_cr", ok).Observe(float64(cost))
	}()

	var cr v1alpha1.PrivateLinkEndpoint
	err = client.K8sAPI.Client.Get(ctx, types.NamespacedName{Namespace: namespace, Name: name}, &cr)
	if err != nil {
		return nil, err
	}
	return &cr, nil
}

func DeletePrivateLinkEndpointCR(ctx context.Context, namespace, name string) error {
	var err error
	startTime := time.Now()
	defer func() {
		cost := time.Since(startTime).Milliseconds()
		ok := strconv.FormatBool(err == nil)
		metrics.DownstreamRequestDuration.WithLabelValues("regional-k8s-apiserver", "del_privatelinkendpoint_cr", ok).Observe(float64(cost))
	}()

	cr := &v1alpha1.PrivateLinkEndpoint{ObjectMeta: metav1.ObjectMeta{
		Namespace: namespace,
		Name:      name,
	}}
	err = client.K8sAPI.Client.Delete(ctx, cr)
	if err != nil {
		return err
	}
	return nil
}

func CreatePrivateLinkEndpointCR(ctx context.Context, cr *v1alpha1.PrivateLinkEndpoint) error {

	var err error
	startTime := time.Now()
	defer func() {
		cost := time.Since(startTime).Milliseconds()
		ok := strconv.FormatBool(err == nil)
		metrics.DownstreamRequestDuration.WithLabelValues("regional-k8s-apiserver", "create_privatelinkendpoint_cr", ok).Observe(float64(cost))
	}()

	err = client.K8sAPI.Client.Create(ctx, cr)
	if err != nil {
		return err
	}
	return nil
}
