package resourcemanager

import (
	"context"
	"testing"

	"github.com/stretchr/testify/assert"
	rbacv1 "k8s.io/api/rbac/v1"

	"github.com/tidbcloud/observability/pkg/common/constants"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func mockClusterRoleBinding(id string, tenantID, projectID string) *rbacv1.ClusterRoleBinding {
	return &rbacv1.ClusterRoleBinding{
		ObjectMeta: metav1.ObjectMeta{
			Name: id,
			Labels: map[string]string{
				constants.LabelClusterID:     id,
				constants.LabelVendor:        "aws",
				constants.LabelRegion:        "us-east-2",
				constants.LabelTenantID:      tenantID,
				constants.LabelProjectID:     projectID,
				constants.LabelApplicationID: "default",
				constants.LabelBizType:       "default",
			},
		},
		Subjects: []rbacv1.Subject{
			0: {
				Namespace: "default-" + tenantID,
				Name:      "default-" + tenantID,
			},
		},
		RoleRef: rbacv1.RoleRef{
			Kind: "ClusterRole",
			Name: "prometheus",
		},
	}
}

func Test_CreateAndDeleteClusterRoleBinding(t *testing.T) {
	clusterRW.CreateCluster(context.TODO(), mockCluster(defaultClusterID, "default", "defaultProject"))
	defer clusterRW.DeleteCluster(context.TODO(), defaultClusterID)
	err := clusterRoleBindingRW.Create(context.TODO(), mockClusterRoleBinding(defaultClusterID, "default", "defaultProject"))
	defer clusterRoleBindingRW.Delete(context.TODO(), defaultClusterID)
	assert.NoError(t, err)
	err = clusterRoleBindingRW.Create(context.TODO(), mockClusterRoleBinding(defaultClusterID, "default", "defaultProject"))
	assert.NoError(t, err)
}

func Test_DeleteClusterRoleBindingNotExists(t *testing.T) {
	err := clusterRoleBindingRW.Delete(context.TODO(), "test")
	assert.NoError(t, err)
	err = clusterRoleBindingRW.Delete(context.TODO(), "test")
	assert.NoError(t, err)

}
