package rbac

import (
	"context"
	"log"
	"os"
	"testing"

	ddbDao "github.com/tidbcloud/account/internel/dao/ddb"
	"github.com/tidbcloud/account/internel/dao/entity"

	"github.com/smartystreets/goconvey/convey"
	"github.com/tidbcloud/account/pkg/docker_db"
	"gorm.io/gorm"
)

var db *gorm.DB

var ddbClient *ddbDao.DynamoDBClient

func init() {
	var err error
	db, err = docker_db.TryInitCentralDB(true)
	if err != nil {
		log.Printf("Failed to init docker db: %s", err)
		os.Exit(-1)
		return
	}
	ddbClient = ddbDao.NewDynamoDBClient(
		nil,
		"api-key",
		"privilege-role",
		"privilege-role-gsi",
		true, // disable write
	)
}

func TestCeateRbacRole(t *testing.T) {
	d := &RbacDao{}
	ctx := context.TODO()

	rbacRole := entity.RbacRole{
		Name:        "testName",
		DisplayName: "test",
		Description: "description",
		ScopeType:   entity.RoleBindingScopeProject,
		Updatable:   entity.Updatable{},
	}

	convey.Convey("CeateRbacRole", t, func() {
		err := db.Create(&rbacRole).Error
		convey.So(err, convey.ShouldBeNil)
	})

	convey.Convey("GetRbacRoleByID", t, func() {
		r, err := d.GetRbacRoleByID(ctx, db, 1)
		convey.So(err, convey.ShouldBeNil)
		convey.So(r.Name, convey.ShouldEqual, "testName")
		convey.So(r.ID, convey.ShouldEqual, 1)
	})

}

/*func TestGetRbacRoleByID(t *testing.T) {
	d := &RbacDao{}
	ctx := context.TODO()

	convey.Convey("GetRbacRoleByID", t, func() {
		org, err := d.GetRbacRoleByID(ctx, db, 1)
		convey.So(err, convey.ShouldBeNil)
		convey.So(org.Name, convey.ShouldEqual, "org")
	})

}
*/
