package database

import (
	"testing"
	"time"

	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/AgentTeam/internal/store/resource/roles"
)

func TestMigratePermissionsBackfillsRoleOwnerGrants(t *testing.T) {
	db, err := open(Config{DSN: "file:meshx_role_owner_backfill?mode=memory&cache=shared"}, false)
	require.NoError(t, err)
	defer func() { require.NoError(t, Close(db)) }()

	createdAt := time.Date(2026, 6, 1, 1, 2, 3, 0, time.UTC)
	require.NoError(t, db.AutoMigrate(&roles.Role{}))
	require.NoError(t, db.Create(&roles.Role{
		ID:               "role_legacy",
		WorkspaceID:      "wsp_1",
		Slug:             "legacy-role",
		Name:             "Legacy Role",
		Description:      "",
		TagsJSON:         "[]",
		Definition:       "Legacy role definition",
		RuntimeHintsJSON: "{}",
		AttachmentsJSON:  "[]",
		IsActive:         true,
		CreatedBy:        "owner-user",
		UpdatedBy:        "owner-user",
		CreatedAt:        createdAt,
		UpdatedAt:        createdAt,
	}).Error)

	require.NoError(t, Migrate(db))

	var grants []roles.RoleGrant
	require.NoError(t, db.Where("workspace_id = ? AND role_id = ?", "wsp_1", "role_legacy").Find(&grants).Error)
	require.Len(t, grants, 1)
	require.Equal(t, "user", grants[0].SubjectType)
	require.Equal(t, "owner-user", grants[0].SubjectID)
	require.Equal(t, "owner", grants[0].Role)

	require.NoError(t, Migrate(db))
	require.NoError(t, db.Where("workspace_id = ? AND role_id = ?", "wsp_1", "role_legacy").Find(&grants).Error)
	require.Len(t, grants, 1)
}
