package cluster

import (
	"k8s.io/apimachinery/pkg/types"
	"k8s.io/client-go/util/workqueue"
	ctrl "sigs.k8s.io/controller-runtime"
	"sigs.k8s.io/controller-runtime/pkg/event"

	pingcap "github.com/pingcap/tidb-operator/pkg/apis/pingcap/v1alpha1"
	"github.com/tidbcloud/shared-provider/pkg/utils/labels"
)

func (r *Reconciler) handleDeleteTcEvent(e event.DeleteEvent, q workqueue.RateLimitingInterface) {
	if e.Object == nil {
		r.Error(nil, "DeleteEvent received with no metadata", "event", e)
		return
	}
	enqueueClusterFromTc(e.Object.(*pingcap.TidbCluster), q)
}

func (r *Reconciler) handleUpdateTcEvent(e event.UpdateEvent, q workqueue.RateLimitingInterface) {
	if e.ObjectNew == nil {
		r.Error(nil, "UpdateEvent received with no new metadata", "event", e)
		return
	}
	enqueueClusterFromTc(e.ObjectNew.(*pingcap.TidbCluster), q)
}

func enqueueClusterFromTc(tc *pingcap.TidbCluster, q workqueue.RateLimitingInterface) {
	ownedBy, netNs, name, _ := labels.GetOwnerFromLabels(tc.Labels)
	if ownedBy != labels.GVKString(&ClusterGVK) {
		return
	}
	q.Add(ctrl.Request{
		NamespacedName: types.NamespacedName{
			Namespace: netNs,
			Name:      name,
		},
	})
}
