package utils

import (
	"context"

	corev1 "k8s.io/api/core/v1"
	apierrors "k8s.io/apimachinery/pkg/api/errors"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	clientSet "k8s.io/client-go/kubernetes"
	corelisters "k8s.io/client-go/listers/core/v1"

	"github.com/pingcap/test-infra/services/webhook/pkg/metrics"
)

func GetPodWithCache(ctx context.Context, podLister corelisters.PodLister, kubeClient clientSet.Interface, namespace string, podName string) (*corev1.Pod, error) {
	pod, err := podLister.Pods(namespace).Get(podName)
	if apierrors.IsNotFound(err) {
		pod, err = kubeClient.CoreV1().Pods(namespace).Get(ctx, podName, metav1.GetOptions{})
		if err == nil {
			metrics.InformerCacheMissCounter.WithLabelValues("Pod").Inc()
		}
	}

	return pod, err
}
