package data

import (
	"sigs.k8s.io/controller-runtime/pkg/client"
)

type Patch interface {
	Patch(obj client.Object) client.Object
}

type CommonPatch func(obj client.Object) client.Object

func (p CommonPatch) Patch(obj client.Object) client.Object {
	return p(obj)
}

func Apply(obj client.Object, patches ...Patch) client.Object {
	for _, patch := range patches {
		obj = patch.Patch(obj)
	}
	return obj
}

func WithReconciler(reconciler string) CommonPatch {
	return func(obj client.Object) client.Object {
		ls := obj.GetLabels()
		ls["cloud.pingcap.com/reconciler"] = reconciler
		obj.SetLabels(ls)

		return obj
	}
}
