"""Tests for player/team name normalization."""

import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../../scripts'))

from publishing_integrity.normalization import (
    normalize_player_name,
    normalize_team_abbrev,
    player_names_match,
    extract_player_canonical_id,
    parse_sgo_player_id,
)


def test_basic_normalization():
    assert normalize_player_name("LeBron James") == "lebron james"
    assert normalize_player_name("LeBron James Jr.") == "lebron james"
    assert normalize_player_name("LeBron James III") == "lebron james"


def test_accent_removal():
    assert normalize_player_name("Nikola Jokić") == "nikola jokic"
    assert normalize_player_name("José Ramírez") == "jose ramirez"
    assert normalize_player_name("Luka Dončić") == "luka doncic"


def test_whitespace_normalization():
    assert normalize_player_name("  LeBron   James  ") == "lebron james"
    assert normalize_player_name("") == ""


def test_suffix_stripping():
    assert normalize_player_name("Ken Griffey Jr.") == "ken griffey"
    assert normalize_player_name("Ken Griffey Sr.") == "ken griffey"
    assert normalize_player_name("Robert Griffin III") == "robert griffin"
    assert normalize_player_name("Patrick Williams II") == "patrick williams"


def test_player_names_match():
    assert player_names_match("LeBron James", "lebron james")
    assert player_names_match("Nikola Jokić", "Nikola Jokic")
    assert player_names_match("LeBron James Jr.", "LeBron James")
    assert not player_names_match("LeBron James", "Kevin Durant")


def test_team_abbrev_normalization():
    assert normalize_team_abbrev("GS") == "GSW"
    assert normalize_team_abbrev("gsw") == "GSW"
    assert normalize_team_abbrev("LA") == "LAK"
    assert normalize_team_abbrev("PHO") == "PHX"
    assert normalize_team_abbrev("UTAH") == "UTA"
    assert normalize_team_abbrev("NYK") == "NYK"


def test_canonical_id():
    cid = extract_player_canonical_id("LeBron James", "nba")
    assert cid == "lebron_james_nba"

    cid2 = extract_player_canonical_id("Nikola Jokić", "nba")
    assert cid2 == "nikola_jokic_nba"


def test_sgo_player_id_parsing():
    name, league = parse_sgo_player_id("LEBRON_JAMES_1_NBA")
    assert name == "Lebron James"
    assert league == "nba"

    name2, league2 = parse_sgo_player_id("NIKOLA_JOKIC_2_NBA")
    assert name2 == "Nikola Jokic"
    assert league2 == "nba"


def test_empty_inputs():
    assert normalize_player_name("") == ""
    assert normalize_team_abbrev("") == ""
    # Empty strings normalize to same value, so they match (expected)
    assert player_names_match("", "") == True


if __name__ == "__main__":
    test_basic_normalization()
    test_accent_removal()
    test_whitespace_normalization()
    test_suffix_stripping()
    test_player_names_match()
    test_team_abbrev_normalization()
    test_canonical_id()
    test_sgo_player_id_parsing()
    test_empty_inputs()
    print("All normalization tests passed!")
