package tidbscaler

import (
	"time"

	corev1 "k8s.io/api/core/v1"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

func (ts *TidbScaler) Reduce(step int) {
	deleted := 0

	for _, podName := range ts.tManager.GetOldTidbFromFreeCache("FakeRevision", false) {
		if deleted >= step {
			break
		}

		pod := &corev1.Pod{}
		if err := ts.client.Get(ts.ctx, client.ObjectKey{Name: podName, Namespace: ts.tidbPoolNamespace}, pod); err != nil {
			ts.Error(err, "failed to get pod before deletion", "pod name", podName)
			continue
		}

		// Skip very new pods (created within the last 5 minutes)
		if time.Since(pod.CreationTimestamp.Time) < 5*time.Minute {
			ts.Info("skip young free cache tidb pod (<5m)",
				"pod name", podName, "age", time.Since(pod.CreationTimestamp.Time).String())
			continue
		}

		if err := client.IgnoreNotFound(ts.client.Delete(ts.ctx, pod)); err != nil {
			ts.Error(err, "failed to delete free cache pod", "pod name", podName)
			continue
		}

		ts.Info("[pod lifecycle] delete free cache tidb pod", "pod name", podName)
		deleted++
	}
}
