package packs

import (
	"testing"

	"github.com/nexuscrm/permissions"
	cp "github.com/pingcap-inc/nexuscrm-contract/pkg/controlplane"
)

func crmPermissionRegistrationSetForTest(t *testing.T) ComponentKindRegistrationSet {
	t.Helper()

	providers := []func() (cp.ComponentKindRegistration, cp.ComponentManagedLifecycleRegistration, error){
		permissions.NewCustomPermissionManagedLifecycleRegistration,
		permissions.NewPermissionSetDefinitionManagedLifecycleRegistration,
	}
	bindings := make([]cp.ComponentKindManagedLifecycleRegistration, 0, len(providers))
	for index, provider := range providers {
		registration, lifecycle, err := provider()
		if err != nil {
			t.Fatalf("CRM permission registration provider %d: %v", index, err)
		}
		binding, err := registration.WithManagedLifecycle(lifecycle)
		if err != nil {
			t.Fatalf("bind CRM permission registration provider %d: %v", index, err)
		}
		bindings = append(bindings, binding)
	}

	set, err := NewComponentKindRegistrationSetWithManagedLifecycles(nil, bindings)
	if err != nil {
		t.Fatalf("build CRM permission registration set: %v", err)
	}
	return set
}
