package profanity

import "testing"

func TestHeroNameIsProfane_english(t *testing.T) {
	if HeroNameIsProfane("Alice") {
		t.Fatal("expected clean name")
	}
	if !HeroNameIsProfane("fuckface") {
		t.Fatal("expected English profanity")
	}
}

func TestHeroNameIsProfane_russianPlain(t *testing.T) {
	for _, n := range []string{"ХУЙ", "хуй", "ХуЙ", "хуйло", "пиздец", "сука"} {
		if !HeroNameIsProfane(n) {
			t.Fatalf("expected profane: %q", n)
		}
	}
}

func TestHeroNameIsProfane_khersonNotBlocked(t *testing.T) {
	if HeroNameIsProfane("Херсон") {
		t.Fatal("did not expect city name to be blocked")
	}
}

func TestHeroNameIsProfane_mixedLatinCyrillic(t *testing.T) {
	cases := []string{
		"xуй",  // лат. x + кирил. уй
		"хyй",  // кирил. х + лат. y + кирил. й
		"hуй",  // лат. h → х
		"xyи",  // лат. xy + кирил. и
		"cука", // лат. c → с
	}
	for _, n := range cases {
		if !HeroNameIsProfane(n) {
			t.Fatalf("expected profane (mixed script): %q", n)
		}
	}
}

func TestHeroNameIsProfane_digitHomoglyphs(t *testing.T) {
	// смешанный ник: кириллица + цифра вместо буквы (3 → з)
	if !HeroNameIsProfane("пи3да") {
		t.Fatal("expected 3→з to form пизда")
	}
}

func TestHeroNameIsProfane_cyrillicHomoglyphEnglish(t *testing.T) {
	if !HeroNameIsProfane("fu\u0441k") { // кириллическая «с»
		t.Fatal("expected spoof latin profanity to be caught")
	}
}
