package bittorrent

import (
	"testing"
)

func TestClientID(t *testing.T) {
	clientTable := []struct{ peerID, clientID string }{
		{"-AZ3034-6wfG2wk6wWLc", "AZ3034"},
		{"-AZ3042-6ozMq5q6Q3NX", "AZ3042"},
		{"-BS5820-oy4La2MWGEFj", "BS5820"},
		{"-AR6360-6oZyyMWoOOBe", "AR6360"},
		{"-AG2083-s1hiF8vGAAg0", "AG2083"},
		{"-AG3003-lEl2Mm4NEO4n", "AG3003"},
		{"-MR1100-00HS~T7*65rm", "MR1100"},
		{"-LK0140-ATIV~nbEQAMr", "LK0140"},
		{"-KT2210-347143496631", "KT2210"},
		{"-TR0960-6ep6svaa61r4", "TR0960"},
		{"-XX1150-dv220cotgj4d", "XX1150"},
		{"-AZ2504-192gwethivju", "AZ2504"},
		{"-KT4310-3L4UvarKuqIu", "KT4310"},
		{"-AZ2060-0xJQ02d4309O", "AZ2060"},
		{"-BD0300-2nkdf08Jd890", "BD0300"},
		{"-A~0010-a9mn9DFkj39J", "A~0010"},
		{"-UT2300-MNu93JKnm930", "UT2300"},
		{"-UT2300-KT4310KT4301", "UT2300"},

		{"T03A0----f089kjsdf6e", "T03A0-"},
		{"S58B-----nKl34GoNb75", "S58B--"},
		{"M4-4-0--9aa757Efd5Bl", "M4-4-0"},

		{"AZ2500BTeYUzyabAfo6U", "AZ2500"}, // BitTyrant
		{"exbc0JdSklm834kj9Udf", "exbc0J"}, // Old BitComet
		{"FUTB0L84j542mVc84jkd", "FUTB0L"}, // Alt BitComet
		{"XBT054d-8602Jn83NnF9", "XBT054"}, // XBT
		{"OP1011affbecbfabeefb", "OP1011"}, // Opera
		{"-ML2.7.2-kgjjfkd9762", "ML2.7."}, // MLDonkey
		{"-BOWA0C-SDLFJWEIORNM", "BOWA0C"}, // Bits on Wheels
		{"Q1-0-0--dsn34DFn9083", "Q1-0-0"}, // Queen Bee
		{"Q1-10-0-Yoiumn39BDfO", "Q1-10-"}, // Queen Bee Alt
		{"346------SDFknl33408", "346---"}, // TorreTopia
		{"QVOD0054ABFFEDCCDEDB", "QVOD00"}, // Qvod
	}

	for _, tt := range clientTable {
		t.Run(tt.peerID, func(t *testing.T) {
			var clientID ClientID
			copy(clientID[:], []byte(tt.clientID))
			parsedID := NewClientID(PeerIDFromString(tt.peerID))
			if parsedID != clientID {
				t.Error("Incorrectly parsed peer ID", tt.peerID, "as", parsedID)
			}
		})
	}
}
