package networkpolicy

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

	"github.com/tidbcloud/infra-provider/network-policy-controller/pkg/types"
)

func isTiDBNamespace(ns *corev1.Namespace) bool {
	val, ok := ns.Labels[types.LabelKeyNamespaceType]
	if ok && val == types.LabelValNamespaceTypeTiDB {
		return true
	}

	return false
}

func (r *Reconciler) handleCreateNamespaceEvent(e event.CreateEvent, q workqueue.RateLimitingInterface) {
	// nolint: forcetypeassert // obj will always be namespace
	ns := e.Object.(*corev1.Namespace)
	if !isTiDBNamespace(ns) {
		return
	}

	for _, name := range AllPolicyNames {
		q.Add(ctrl.Request{
			NamespacedName: apitypes.NamespacedName{
				Namespace: ns.Name,
				Name:      name,
			},
		})
	}
}
