package layoutroutingsecurity

import (
	"database/sql"
	"testing"

	layoutroutingsecurityv1 "github.com/pingcap-inc/nexuscrm-contract/pkg/layoutroutingsecurityv1"
)

func verifiedShadowViewStore(db *sql.DB) *VerifiedViewStore {
	return &VerifiedViewStore{db: db, table: shadowViewStoreTableIdentity}
}

func routingSecurityViewFixture() layoutroutingsecurityv1.View {
	return layoutroutingsecurityv1.View{
		OrgID:                      "org.example",
		CanonicalizationVersion:    layoutroutingsecurityv1.ViewCanonicalizationVersion,
		KeyGrammarVersion:          layoutroutingsecurityv1.KeyGrammarVersion,
		RoleTopologyGrammarVersion: layoutroutingsecurityv1.RoleTopologyGrammarVersion,
		Profiles: []layoutroutingsecurityv1.ProfileIdentity{{
			Key: layoutroutingsecurityv1.ProfileKey{
				NamespaceID: "catalog.example",
				LocalKey:    "admins",
			},
			ResolvedProfileID: "profile-1",
			State:             layoutroutingsecurityv1.IdentityStateActive,
		}},
		Roles: []layoutroutingsecurityv1.RoleIdentity{{
			Key: layoutroutingsecurityv1.RoleKey{
				NamespaceID: "catalog.example",
				LocalKey:    "admins",
			},
			ResolvedRoleID: "role-1",
			State:          layoutroutingsecurityv1.IdentityStateActive,
		}},
	}
}

func mustCanonicalView(t *testing.T, view layoutroutingsecurityv1.View) ([]byte, string) {
	t.Helper()
	canonical, err := layoutroutingsecurityv1.CanonicalViewBytes(view)
	if err != nil {
		t.Fatal(err)
	}
	digest, err := layoutroutingsecurityv1.ViewDigest(view)
	if err != nil {
		t.Fatal(err)
	}
	return canonical, digest
}
