// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package testutil

var invalidBlessingPatterns = []string{
	":",
	"a:",
	":b",
	"a::b",
	"a/b",
	"a/",
}

var validBlessingPatterns = []string{
	"a",
	"a:b",
	"v.io",
	"v.io:foo",
	"v.io:a:admin@myapp.com",
	"v.io:o:app:user",
	"\x00",
	"\xfb",
	"a\x00",
	"a\xfb",
	"안녕하세요",
	// 16 4-byte runes => 64 bytes
	"𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎",
}

var invalidIdentifiers = []string{
	"/",
	"a/b",
	":",
	"a:b",
	"*",
	"\x00",
	"\x01",
	"\xfa",
	"\xfb",
	"@@",
	"dev.v.io/a/admin@myapp.com",
	"dev.v.io:a:admin@myapp.com",
	"안녕하세요",
	// 16 4-byte runes => 64 bytes
	"𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎",
}

var validIdentifiers = []string{
	"a",
	"B",
	"a_",
	"a__",
	"a0_",
	"a_b",
	"a_0",
	"foobar",
	"BARBAZ",
	// 64 bytes
	"abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcd",
}

var universallyInvalidNames = []string{
	"",
	"\xfc",
	"\xfd",
	"\xfe",
	"\xff",
	"a\xfcb",
	"a\xfdb",
	"a\xfeb",
	"a\xffb",
}

var longNames = []string{
	// 65 bytes
	"abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcde",
	// 16 4-byte runes + 1 more byte => 65 bytes
	"𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎𠜎a",
}

func concat(slices ...[]string) []string {
	var res []string
	for _, slice := range slices {
		res = append(res, slice...)
	}
	return res
}

var (
	OkAppBlessings    []string = validBlessingPatterns
	NotOkAppBlessings []string = concat(universallyInvalidNames, invalidBlessingPatterns, longNames)

	OkDbNames    []string = validIdentifiers
	NotOkDbNames []string = concat(universallyInvalidNames, longNames, invalidIdentifiers)
)

var (
	OkCollectionNames    []string = OkDbNames
	NotOkCollectionNames []string = NotOkDbNames
)

var (
	OkRowKeys    []string = concat(validIdentifiers, invalidIdentifiers, longNames)
	NotOkRowKeys []string = universallyInvalidNames
)
