package pod

import (
	"time"

	corev1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

const (
	SafeToEvictAnno = "cluster-autoscaler.kubernetes.io/safe-to-evict"

	DelSafeToEvictAnno = iota
	AddSafeToEvictAnno
	NoUpdate
)

var (
	EvictComponents EvictComponent = []string{"tidb", "pd", "tikv", "tiflash"}
)

type EvictComponent []string

func (ec EvictComponent) Find(name string) bool {
	for _, n := range ec {
		if n == name {
			return true
		}
	}
	return false
}

func NeedUpdateSafeToEvictAnno(pod *corev1.Pod, evictDuration time.Duration, lastActiveTimestamp *metav1.Time) int {
	if lastActiveTimestamp != nil && time.Since(lastActiveTimestamp.Time) > evictDuration {
		if _, ok := pod.Annotations[SafeToEvictAnno]; ok {
			delete(pod.Annotations, SafeToEvictAnno)
			return DelSafeToEvictAnno
		}
		return NoUpdate
	}

	if pod.Annotations == nil {
		pod.Annotations = map[string]string{}
	}
	if pod.Annotations[SafeToEvictAnno] != "false" {
		pod.Annotations[SafeToEvictAnno] = "false"
		return AddSafeToEvictAnno
	}
	return NoUpdate
}
