package account

import (
	"slices"
	"testing"
)

// TestSeedVariantsFromStartParam covers decoding a promo deep-link start-param into the
// variant-preference set to seed: a valid "v"-prefixed, "-"-joined label list is cleaned
// to the canonical order and deduplicated, while anything that is not a variant-seed link
// or that names an unknown variant yields nil (leaving the account on its defaults).
func TestSeedVariantsFromStartParam(t *testing.T) {
	tests := []struct {
		name  string
		param string
		want  []string
	}{
		{"english promo", "verudit_ru-scrabble_en", []string{"erudit_ru", "scrabble_en"}},
		{"single variant", "vscrabble_en", []string{"scrabble_en"}},
		{"canonical order regardless of payload order", "vscrabble_en-erudit_ru", []string{"erudit_ru", "scrabble_en"}},
		{"deduplicated", "verudit_ru-erudit_ru", []string{"erudit_ru"}},
		{"empty", "", nil},
		{"prefix only", "v", nil},
		{"routing game link is not a seed", "g0190abcd", nil},
		{"friend code link is not a seed", "f123456", nil},
		{"unknown variant rejected", "vscrabble_de", nil},
		{"one unknown label rejects the whole set", "verudit_ru-scrabble_de", nil},
	}
	for _, tc := range tests {
		t.Run(tc.name, func(t *testing.T) {
			got := SeedVariantsFromStartParam(tc.param)
			if !slices.Equal(got, tc.want) {
				t.Errorf("SeedVariantsFromStartParam(%q) = %v, want %v", tc.param, got, tc.want)
			}
		})
	}
}
