"""
Shared team name mappings: abbreviation → full name.
Import this in any Python script that writes to SportsGame.
"""

ABBREV_TO_FULL = {
    'nba': {
        'ATL': 'Atlanta Hawks', 'BOS': 'Boston Celtics', 'BKN': 'Brooklyn Nets', 'CHA': 'Charlotte Hornets',
        'CHI': 'Chicago Bulls', 'CLE': 'Cleveland Cavaliers', 'DAL': 'Dallas Mavericks', 'DEN': 'Denver Nuggets',
        'DET': 'Detroit Pistons', 'GSW': 'Golden State Warriors', 'GS': 'Golden State Warriors',
        'HOU': 'Houston Rockets', 'IND': 'Indiana Pacers',
        'LAC': 'Los Angeles Clippers', 'LAL': 'Los Angeles Lakers', 'MEM': 'Memphis Grizzlies', 'MIA': 'Miami Heat',
        'MIL': 'Milwaukee Bucks', 'MIN': 'Minnesota Timberwolves',
        'NOP': 'New Orleans Pelicans', 'NO': 'New Orleans Pelicans',
        'NYK': 'New York Knicks', 'NY': 'New York Knicks',
        'OKC': 'Oklahoma City Thunder', 'ORL': 'Orlando Magic', 'PHI': 'Philadelphia 76ers', 'PHX': 'Phoenix Suns',
        'POR': 'Portland Trail Blazers', 'SAC': 'Sacramento Kings',
        'SAS': 'San Antonio Spurs', 'SA': 'San Antonio Spurs',
        'TOR': 'Toronto Raptors',
        'UTA': 'Utah Jazz', 'UTAH': 'Utah Jazz',
        'WAS': 'Washington Wizards', 'WSH': 'Washington Wizards',
    },
    'nfl': {
        'ARI': 'Arizona Cardinals', 'ATL': 'Atlanta Falcons', 'BAL': 'Baltimore Ravens', 'BUF': 'Buffalo Bills',
        'CAR': 'Carolina Panthers', 'CHI': 'Chicago Bears', 'CIN': 'Cincinnati Bengals', 'CLE': 'Cleveland Browns',
        'DAL': 'Dallas Cowboys', 'DEN': 'Denver Broncos', 'DET': 'Detroit Lions', 'GB': 'Green Bay Packers',
        'HOU': 'Houston Texans', 'IND': 'Indianapolis Colts', 'JAX': 'Jacksonville Jaguars', 'KC': 'Kansas City Chiefs',
        'LV': 'Las Vegas Raiders', 'LAC': 'Los Angeles Chargers', 'LAR': 'Los Angeles Rams', 'MIA': 'Miami Dolphins',
        'MIN': 'Minnesota Vikings', 'NE': 'New England Patriots', 'NO': 'New Orleans Saints', 'NYG': 'New York Giants',
        'NYJ': 'New York Jets', 'PHI': 'Philadelphia Eagles', 'PIT': 'Pittsburgh Steelers', 'SF': 'San Francisco 49ers',
        'SEA': 'Seattle Seahawks', 'TB': 'Tampa Bay Buccaneers', 'TEN': 'Tennessee Titans', 'WAS': 'Washington Commanders',
    },
    'nhl': {
        'ANA': 'Anaheim Ducks', 'BOS': 'Boston Bruins', 'BUF': 'Buffalo Sabres', 'CGY': 'Calgary Flames',
        'CAR': 'Carolina Hurricanes', 'CHI': 'Chicago Blackhawks', 'COL': 'Colorado Avalanche',
        'CBJ': 'Columbus Blue Jackets', 'DAL': 'Dallas Stars', 'DET': 'Detroit Red Wings', 'EDM': 'Edmonton Oilers',
        'FLA': 'Florida Panthers', 'LA': 'Los Angeles Kings', 'LAK': 'Los Angeles Kings',
        'MIN': 'Minnesota Wild', 'MTL': 'Montreal Canadiens', 'NSH': 'Nashville Predators',
        'NJD': 'New Jersey Devils', 'NJ': 'New Jersey Devils', 'NYI': 'New York Islanders', 'NYR': 'New York Rangers',
        'OTT': 'Ottawa Senators', 'PHI': 'Philadelphia Flyers', 'PIT': 'Pittsburgh Penguins',
        'SJ': 'San Jose Sharks', 'SJS': 'San Jose Sharks', 'SEA': 'Seattle Kraken',
        'STL': 'St. Louis Blues', 'TB': 'Tampa Bay Lightning', 'TBL': 'Tampa Bay Lightning',
        'TOR': 'Toronto Maple Leafs', 'UTA': 'Utah Hockey Club', 'UTAH': 'Utah Hockey Club', 'VAN': 'Vancouver Canucks',
        'VGK': 'Vegas Golden Knights', 'WSH': 'Washington Capitals', 'WPG': 'Winnipeg Jets',
    },
    'mlb': {
        'ARI': 'Arizona Diamondbacks', 'ATL': 'Atlanta Braves', 'BAL': 'Baltimore Orioles', 'BOS': 'Boston Red Sox',
        'CHC': 'Chicago Cubs', 'CWS': 'Chicago White Sox', 'CIN': 'Cincinnati Reds', 'CLE': 'Cleveland Guardians',
        'COL': 'Colorado Rockies', 'DET': 'Detroit Tigers', 'HOU': 'Houston Astros', 'KC': 'Kansas City Royals',
        'LAA': 'Los Angeles Angels', 'LAD': 'Los Angeles Dodgers', 'MIA': 'Miami Marlins', 'MIL': 'Milwaukee Brewers',
        'MIN': 'Minnesota Twins', 'NYM': 'New York Mets', 'NYY': 'New York Yankees', 'OAK': 'Oakland Athletics',
        'PHI': 'Philadelphia Phillies', 'PIT': 'Pittsburgh Pirates', 'SD': 'San Diego Padres',
        'SF': 'San Francisco Giants', 'SEA': 'Seattle Mariners', 'STL': 'St. Louis Cardinals',
        'TB': 'Tampa Bay Rays', 'TEX': 'Texas Rangers', 'TOR': 'Toronto Blue Jays', 'WAS': 'Washington Nationals',
        'WSH': 'Washington Nationals',
    },
    'wnba': {
        'ATL': 'Atlanta Dream', 'CHI': 'Chicago Sky', 'CON': 'Connecticut Sun', 'CONN': 'Connecticut Sun',
        'CT': 'Connecticut Sun', 'DAL': 'Dallas Wings', 'GS': 'Golden State Valkyries',
        'GSV': 'Golden State Valkyries', 'HOU': 'Houston Comets', 'IND': 'Indiana Fever',
        'LA': 'Los Angeles Sparks', 'LAS': 'Las Vegas Aces', 'LOS': 'Los Angeles Sparks',
        'LVA': 'Las Vegas Aces', 'LV': 'Las Vegas Aces', 'MIN': 'Minnesota Lynx',
        'NY': 'New York Liberty', 'NYL': 'New York Liberty', 'PHO': 'Phoenix Mercury',
        'PHX': 'Phoenix Mercury', 'SA': 'San Antonio Stars', 'SAT': 'San Antonio Stars',
        'SEA': 'Seattle Storm', 'TUL': 'Tulsa Shock', 'UTH': 'Utah Starzz',
        'WAS': 'Washington Mystics', 'WSH': 'Washington Mystics',
        # Historical
        'CHA': 'Charlotte Sting', 'CLE': 'Cleveland Rockers', 'DET': 'Detroit Shock',
        'MIA': 'Miami Sol', 'ORL': 'Orlando Miracle', 'POR': 'Portland Fire',
        'SAC': 'Sacramento Monarchs',
    },
    # Soccer — The Odds API returns full team names; these are passthrough + common abbreviations
    'epl': {
        'ARS': 'Arsenal', 'AVL': 'Aston Villa', 'BOU': 'AFC Bournemouth', 'BRE': 'Brentford',
        'BHA': 'Brighton and Hove Albion', 'CHE': 'Chelsea', 'CRY': 'Crystal Palace',
        'EVE': 'Everton', 'FUL': 'Fulham', 'IPS': 'Ipswich Town', 'LEI': 'Leicester City',
        'LIV': 'Liverpool', 'MCI': 'Manchester City', 'MUN': 'Manchester United',
        'NEW': 'Newcastle United', 'NFO': 'Nottingham Forest', 'SOU': 'Southampton',
        'TOT': 'Tottenham Hotspur', 'WHU': 'West Ham United', 'WOL': 'Wolverhampton Wanderers',
    },
    'bundesliga': {
        'BAY': 'Bayern Munich', 'BVB': 'Borussia Dortmund', 'RBL': 'RB Leipzig',
        'LEV': 'Bayer Leverkusen', 'BMG': 'Borussia Monchengladbach', 'WOB': 'VfL Wolfsburg',
        'FRE': 'SC Freiburg', 'SGE': 'Eintracht Frankfurt', 'HOF': 'TSG Hoffenheim',
        'UNB': 'Union Berlin', 'STU': 'VfB Stuttgart', 'MAI': 'Mainz 05',
        'AUG': 'FC Augsburg', 'WER': 'Werder Bremen', 'BOC': 'VfL Bochum',
        'HEI': 'Heidenheim', 'DAR': 'Darmstadt 98', 'KOE': 'FC Koln',
    },
    'seriea': {
        'JUV': 'Juventus', 'INT': 'Inter Milan', 'MIL': 'AC Milan', 'NAP': 'Napoli',
        'ROM': 'AS Roma', 'LAZ': 'Lazio', 'ATA': 'Atalanta', 'FIO': 'Fiorentina',
        'BOL': 'Bologna', 'TOR': 'Torino', 'MON': 'Monza', 'UDI': 'Udinese',
        'SAS': 'Sassuolo', 'EMP': 'Empoli', 'CAG': 'Cagliari', 'GEN': 'Genoa',
        'LEC': 'Lecce', 'FRO': 'Frosinone', 'SAL': 'Salernitana', 'VER': 'Hellas Verona',
    },
    'laliga': {
        'RMA': 'Real Madrid', 'BAR': 'Barcelona', 'ATM': 'Atletico Madrid',
        'RSO': 'Real Sociedad', 'BET': 'Real Betis', 'VIL': 'Villarreal',
        'ATH': 'Athletic Bilbao', 'SEV': 'Sevilla', 'VAL': 'Valencia',
        'CEL': 'Celta Vigo', 'GET': 'Getafe', 'OSA': 'Osasuna',
        'MAL': 'Mallorca', 'GIR': 'Girona', 'ALA': 'Alaves',
        'LPA': 'Las Palmas', 'RAY': 'Rayo Vallecano', 'CAD': 'Cadiz',
        'ALM': 'Almeria', 'GRA': 'Granada',
    },
    'ligue1': {
        'PSG': 'Paris Saint-Germain', 'OL': 'Olympique Lyonnais', 'OM': 'Olympique de Marseille',
        'MON': 'AS Monaco', 'LIL': 'Lille', 'REN': 'Rennes', 'NIC': 'Nice',
        'LEN': 'RC Lens', 'STR': 'Strasbourg', 'NAN': 'Nantes', 'BRE': 'Brest',
        'TOU': 'Toulouse', 'MON': 'Montpellier', 'REI': 'Reims', 'LOR': 'Lorient',
        'CLF': 'Clermont Foot', 'MET': 'Metz', 'HAV': 'Le Havre',
    },
    'ucl': {},  # UCL teams come from many leagues, passthrough names
    'uel': {},  # Same for Europa League
    'mls': {
        'ATL': 'Atlanta United', 'AUS': 'Austin FC', 'CHI': 'Chicago Fire',
        'CIN': 'FC Cincinnati', 'CLB': 'Columbus Crew', 'COL': 'Colorado Rapids',
        'DAL': 'FC Dallas', 'DCU': 'DC United', 'HOU': 'Houston Dynamo',
        'LA': 'LA Galaxy', 'LAFC': 'Los Angeles FC', 'MIA': 'Inter Miami',
        'MIN': 'Minnesota United', 'MTL': 'CF Montreal', 'NSH': 'Nashville SC',
        'NE': 'New England Revolution', 'NYC': 'New York City FC', 'NYRB': 'New York Red Bulls',
        'ORL': 'Orlando City', 'PHI': 'Philadelphia Union', 'POR': 'Portland Timbers',
        'RSL': 'Real Salt Lake', 'SJ': 'San Jose Earthquakes', 'SEA': 'Seattle Sounders',
        'SKC': 'Sporting Kansas City', 'STL': 'St. Louis City SC', 'TOR': 'Toronto FC',
        'VAN': 'Vancouver Whitecaps',
    },
    # Australian Rules & Rugby League
    'afl': {
        'ADE': 'Adelaide Crows', 'BRL': 'Brisbane Lions', 'CAR': 'Carlton',
        'COL': 'Collingwood', 'ESS': 'Essendon', 'FRE': 'Fremantle',
        'GEE': 'Geelong Cats', 'GCS': 'Gold Coast Suns', 'GWS': 'GWS Giants',
        'HAW': 'Hawthorn', 'MEL': 'Melbourne', 'NOR': 'North Melbourne',
        'POR': 'Port Adelaide', 'RIC': 'Richmond', 'STK': 'St Kilda',
        'SYD': 'Sydney Swans', 'WCE': 'West Coast Eagles', 'WBD': 'Western Bulldogs',
    },
    'nrl': {
        'BRI': 'Brisbane Broncos', 'CAN': 'Canberra Raiders', 'CBY': 'Canterbury Bulldogs',
        'CRO': 'Cronulla Sharks', 'DOL': 'Dolphins', 'GLD': 'Gold Coast Titans',
        'MAN': 'Manly Sea Eagles', 'MEL': 'Melbourne Storm', 'NEW': 'Newcastle Knights',
        'NQL': 'North Queensland Cowboys', 'PAR': 'Parramatta Eels', 'PEN': 'Penrith Panthers',
        'SOU': 'South Sydney Rabbitohs', 'SGI': 'St George Illawarra Dragons',
        'SYD': 'Sydney Roosters', 'WAR': 'New Zealand Warriors', 'WST': 'Wests Tigers',
    },
    'mma': {},  # MMA uses fighter names, no team mappings needed
    'ncaab': {
        # SGO/Kaggle short codes → canonical (The Odds API) names
        'AFA': 'Air Force Falcons', 'AKR': 'Akron Zips',
        'AL A&M': 'Alabama A&M Bulldogs', 'ALA ST': 'Alabama St Hornets',
        'ALBY': 'Albany Great Danes', 'AMER': 'American Eagles',
        'A PEAY': 'Austin Peay Governors', 'APP ST': 'Appalachian St Mountaineers',
        'ARK PB': 'Arkansas-Pine Bluff Golden Lions', 'ARK ST': 'Arkansas St Red Wolves',
        'ASU': 'Arizona St Sun Devils', 'AU': 'Auburn Tigers', 'AZ ST': 'Arizona St Sun Devils',
        'BALL': 'Ball State Cardinals', 'BAY': 'Baylor Bears',
        'BC': 'Boston College Eagles', 'BGSU': 'Bowling Green Falcons',
        'BSU': 'Boise State Broncos', 'BUFF': 'Buffalo Bulls', 'BYU': 'Brigham Young Cougars',
        'C ARK': 'Central Arkansas Bears', 'C CONN': 'Central Connecticut St Blue Devils',
        'CAMP': 'Campbell Fighting Camels', 'CHI ST': 'Chicago St Cougars',
        'CIN': 'Cincinnati Bearcats', 'CLEM': 'Clemson Tigers',
        'CLE ST': 'Cleveland St Vikings', 'C MICH': 'Central Michigan Chippewas',
        'CMU': 'Central Michigan Chippewas', 'CO CAR': 'Coastal Carolina Chanticleers',
        'CO ST': 'Colorado St Rams', 'COLO': 'Colorado Buffaloes',
        'CONN': 'UConn Huskies', 'CREIG': 'Creighton Bluejays',
        'DAY': 'Dayton Flyers', 'DEL ST': 'Delaware St Hornets',
        'DET': 'Detroit Mercy Titans', 'DUKE': 'Duke Blue Devils',
        'DUQ': 'Duquesne Dukes', 'E CAR': 'East Carolina Pirates',
        'E ILL': 'Eastern Illinois Panthers', 'E KY': 'Eastern Kentucky Colonels',
        'E MICH': 'Eastern Michigan Eagles', 'ELON': 'Elon Phoenix',
        'EMU': 'Eastern Michigan Eagles', 'E WASH': 'Eastern Washington Eagles',
        'EWU': 'Eastern Washington Eagles',
        'FL A&M': 'Florida A&M Rattlers', 'FLA': 'Florida Gators',
        'FRES': 'Fresno St Bulldogs', 'FSU': 'Florida St Seminoles',
        'FURM': 'Furman Paladins',
        'GA SOU': 'Georgia Southern Eagles', 'GA ST': 'Georgia St Panthers',
        'GC': 'Grand Canyon Antelopes', 'GMU': 'George Mason Patriots',
        'GONZ': 'Gonzaga Bulldogs', 'GRAM': 'Grambling St Tigers',
        'GW': 'GW Revolutionaries', 'G WASH': 'GW Revolutionaries',
        'G WEBB': 'Gardner-Webb Bulldogs',
        'HAMP': 'Hampton Pirates', 'HARV': 'Harvard Crimson',
        'HOF': 'Hofstra Pride', 'HOW': 'Howard Bison',
        'ID ST': 'Idaho State Bengals', 'IDST': 'Idaho State Bengals',
        'IDHO': 'Idaho Vandals', 'ILL': 'Illinois Fighting Illini',
        'ILL ST': 'Illinois St Redbirds', 'ILST': 'Illinois St Redbirds',
        'IND': 'Indiana Hoosiers', 'IND ST': 'Indiana St Sycamores',
        'IOWA': 'Iowa Hawkeyes', 'IW': 'Incarnate Word Cardinals',
        'JAC': 'Jacksonville Dolphins', 'JAX ST': 'Jacksonville St Gamecocks',
        'JKST': 'Jackson St Tigers', 'JVST': 'Jacksonville St Gamecocks',
        'KAN': 'Kansas Jayhawks', 'KAN ST': 'Kansas St Wildcats', 'KSU': 'Kansas St Wildcats',
        'KENT': 'Kent State Golden Flashes', 'KY': 'Kentucky Wildcats',
        'LAF': 'Lafayette Leopards', 'LA MON': 'UL Monroe Warhawks',
        'LAS': 'La Salle Explorers', 'LIU': 'LIU Sharks',
        'LINW': 'Lindenwood Lions', 'LMC': 'Le Moyne Dolphins',
        'LOY LA': 'Loyola Marymount Lions', 'LOY MD': 'Loyola (MD) Greyhounds',
        'L-MD': 'Loyola (MD) Greyhounds',
        'LOU': 'Louisville Cardinals', 'LSU': 'LSU Tigers',
        'M-OH': 'Miami (OH) RedHawks', 'MARQ': 'Marquette Golden Eagles',
        'MASS': 'Massachusetts Minutemen', 'MCNS': 'McNeese Cowboys',
        'MD': 'Maryland Terrapins', 'MEM': 'Memphis Tigers',
        'MIA': 'Miami Hurricanes', 'MIA OH': 'Miami (OH) RedHawks',
        'MICH': 'Michigan Wolverines', 'MINN': 'Minnesota Golden Gophers',
        'MISS': 'Ole Miss Rebels', 'MIZZ': 'Missouri Tigers',
        'MLR': 'UMass Lowell River Hawks',
        'MO ST': 'Missouri St Bears', 'MOSU': 'Missouri St Bears',
        'MONM': 'Monmouth Hawks', 'MONT': 'Montana Grizzlies',
        'MRMK': 'Merrimack Warriors', 'MS VAL': 'Miss Valley St Delta Devils',
        'MSU': 'Michigan St Spartans', 'MTSU': 'Middle Tennessee Blue Raiders',
        'MURR': 'Murray State Racers',
        'N ALA': 'North Alabama Lions', 'NAU': 'Northern Arizona Lumberjacks',
        'NC A&T': 'North Carolina A&T Aggies', 'NC CEN': 'North Carolina Central Eagles',
        'NC ILL': 'Northern Illinois Huskies', 'NC ST': 'NC State Wolfpack',
        'NCST': 'NC State Wolfpack', 'N COLO': 'N Colorado Bears',
        'N DAME': 'Notre Dame Fighting Irish', 'ND ST': 'North Dakota St Bison',
        'NEB': 'Nebraska Cornhuskers', 'NEV': 'Nevada Wolf Pack',
        'NIU': 'Northern Illinois Huskies', 'N IOWA': 'Northern Iowa Panthers',
        'NJIT': 'NJIT Highlanders', 'N KY': 'Northern Kentucky Norse',
        'NM ST': 'New Mexico St Aggies', 'NMSU': 'New Mexico St Aggies',
        'NO FLA': 'North Florida Ospreys', 'NO TEX': 'North Texas Mean Green',
        'NW': 'Northwestern Wildcats', 'NW ST': 'Northwestern St Demons',
        'ODU': 'Old Dominion Monarchs', 'OHIO': 'Ohio Bobcats',
        'OKLA': 'Oklahoma Sooners', 'OKST': 'Oklahoma St Cowboys',
        'OLE': 'Ole Miss Rebels', 'ORE': 'Oregon Ducks',
        'ORST': 'Oregon St Beavers', 'ORE ST': 'Oregon St Beavers',
        'OSU': 'Ohio State Buckeyes',
        'PEAY': 'Austin Peay Governors', 'PENN': 'Pennsylvania Quakers',
        'PFW': 'Fort Wayne Mastodons', 'PITT': 'Pittsburgh Panthers',
        'PRST': 'Portland St Vikings', 'PSU': 'Penn State Nittany Lions',
        'PUR': 'Purdue Boilermakers', 'PV': 'Prairie View Panthers',
        'PV A&M': 'Prairie View Panthers',
        'RICE': 'Rice Owls', 'RID': 'Rider Broncs', 'RMU': 'Robert Morris Colonials',
        'RUTG': 'Rutgers Scarlet Knights',
        'S ALA': 'South Alabama Jaguars', 'SAC ST': 'Sacramento St Hornets',
        'SBON': 'St. Bonaventure Bonnies', 'SC ST': 'South Carolina St Bulldogs',
        'SCAR': 'South Carolina Gamecocks', 'SC UPS': 'South Carolina Upstate Spartans',
        'SCU': 'Santa Clara Broncos', 'SDSU': 'San Diego St Aztecs',
        'SE LA': 'SE Louisiana Lions', 'SEA': 'Seattle Redhawks',
        'SEMO': 'SE Missouri St Redhawks', 'SFA': 'Stephen F. Austin Lumberjacks',
        'S FRAN': 'San Francisco Dons', 'SIE': 'Siena Saints',
        'SIH': 'Southern Illinois Salukis', 'SIND': 'Southern Indiana Screaming Eagles',
        'S IND': 'Southern Indiana Screaming Eagles', 'SIU': 'Southern Illinois Salukis',
        'SJSU': 'San José St Spartans', 'SLU': 'Saint Louis Billikens',
        'SMC': 'Saint Mary\'s Gaels', 'SMU': 'SMU Mustangs',
        'S MISS': 'Southern Miss Golden Eagles',
        'SO DAK': 'South Dakota Coyotes', 'S UTAH': 'Southern Utah Thunderbirds',
        'STAN': 'Stanford Cardinal', 'ST LOU': 'Saint Louis Billikens',
        'ST PTR': 'Saint Peter\'s Peacocks', 'STON': 'Stonehill Skyhawks',
        'SYR': 'Syracuse Orange',
        'TAMC': 'Texas A&M-CC Islanders', 'AMCC': 'Texas A&M-CC Islanders',
        'TARL': 'Tarleton State Texans', 'TCU': 'TCU Horned Frogs',
        'TEMP': 'Temple Owls', 'TENN': 'Tennessee Volunteers',
        'TEX': 'Texas Longhorns', 'TOWS': 'Towson Tigers',
        'TTU': 'Texas Tech Red Raiders', 'TULSA': 'Tulsa Golden Hurricane',
        'TX ARL': 'UT-Arlington Mavericks', 'TX SOU': 'Texas Southern Tigers',
        'TX ST': 'Texas State Bobcats',
        'UC DAV': 'UC Davis Aggies', 'UC IRV': 'UC Irvine Anteaters',
        'UC RIV': 'UC Riverside Highlanders', 'UCF': 'UCF Knights',
        'UCLA': 'UCLA Bruins', 'UGA': 'Georgia Bulldogs',
        'UK': 'Kentucky Wildcats', 'UMBC': 'UMBC Retrievers',
        'UNC': 'North Carolina Tar Heels',
        'UNC A': 'UNC Asheville Bulldogs', 'UNC G': 'UNC Greensboro Spartans',
        'UNCO': 'N Colorado Bears', 'UNF': 'North Florida Ospreys',
        'UNM': 'New Mexico Lobos', 'URI': 'Rhode Island Rams',
        'USU': 'Utah State Aggies', 'UTAH': 'Utah Utes',
        'UT MAR': 'Tenn-Martin Skyhawks', 'UT ST': 'Utah State Aggies',
        'UT VAL': 'Utah Valley Wolverines', 'UTM': 'Tenn-Martin Skyhawks',
        'UVM': 'Vermont Catamounts',
        'VCU': 'VCU Rams', 'VILL': 'Villanova Wildcats', 'VT': 'Virginia Tech Hokies',
        'W CAR': 'Western Carolina Catamounts', 'WAG': 'Wagner Seahawks',
        'WAKE': 'Wake Forest Demon Deacons',
        'WEB': 'Weber State Wildcats', 'WEB ST': 'Weber State Wildcats',
        'W GA': 'West Georgia Wolves', 'WICH': 'Wichita St Shockers',
        'W ILL': 'Western Illinois Leathernecks', 'WIU': 'Western Illinois Leathernecks',
        'WIS': 'Wisconsin Badgers', 'W KY': 'Western Kentucky Hilltoppers',
        'WM': 'William & Mary Tribe', 'W&M': 'William & Mary Tribe',
        'WMU': 'Western Michigan Broncos', 'W MICH': 'Western Michigan Broncos',
        'WVU': 'West Virginia Mountaineers', 'WYO': 'Wyoming Cowboys',
        'XAV': 'Xavier Musketeers', 'YSU': 'Youngstown St Penguins',
        'N MEX': 'New Mexico Lobos', 'NO DAK': 'North Dakota Fighting Hawks',
        'ALCN': 'Alcorn St Braves', 'FIU': 'Florida Int\'l Golden Panthers',
        'WRST': 'Wright State Raiders', 'GVA': 'UT Rio Grande Valley Vaqueros',
        # Extended SGO abbreviations (round 2)
        'UNLV': 'UNLV Rebels', 'UAB': 'UAB Blazers', 'GASO': 'Georgia Southern Eagles',
        'UTEP': 'UTEP Miners', 'USC': 'USC Trojans', 'UTA': 'UT-Arlington Mavericks',
        'UNI': 'Northern Iowa Panthers', 'LEH': 'Lehigh Mountain Hawks',
        'CARK': 'Central Arkansas Bears', 'FOR': 'Fordham Rams',
        'LT': 'Lamar Cardinals', 'MVSU': 'Miss Valley St Delta Devils',
        'DEP': 'DePaul Blue Demons', 'AUB': 'Auburn Tigers',
        'UMKC': 'UMKC Kangaroos', 'TULN': 'Tulane Green Wave',
        'USM': 'Southern Miss Golden Eagles', 'MTU': 'Middle Tennessee Blue Raiders',
        'FAIR': 'Fairfield Stags', 'ETSU': 'East Tennessee St Buccaneers',
        'TEM': 'Temple Owls', 'FUR': 'Furman Paladins',
        'GTWN': 'Georgetown Hoyas', 'UIC': 'UIC Flames',
        'WKU': 'Western Kentucky Hilltoppers', 'CSU': 'Colorado St Rams',
        'FGCU': 'Florida Gulf Coast Eagles', 'CP': 'Cal Poly Mustangs',
        'MSST': 'Mississippi St Bulldogs', 'KENN': 'Kennesaw St Owls',
        'AC': 'Austin Peay Governors', 'WIN': 'Winthrop Eagles',
        'NKU': 'Northern Kentucky Norse', 'UNCG': 'UNC Greensboro Spartans',
        'ARPB': 'Arkansas-Pine Bluff Golden Lions', 'NCAT': 'North Carolina A&T Aggies',
        'SUU': 'Southern Utah Thunderbirds', 'PROV': 'Providence Friars',
        'ARK': 'Arkansas Razorbacks', 'EIU': 'Eastern Illinois Panthers',
        'PRE': 'Presbyterian Blue Hose', 'BUCK': 'Bucknell Bison',
        'ALST': 'Alabama St Hornets', 'NDSU': 'North Dakota St Bison',
        'LIB': 'Liberty Flames', 'BELL': 'Bellarmine Knights',
        'LBSU': 'Long Beach St 49ers', 'DRKE': 'Drake Bulldogs',
        'BUT': 'Butler Bulldogs', 'WASH': 'Washington Huskies',
        'UVA': 'Virginia Cavaliers', 'CLEV': 'Cleveland St Vikings',
        'STET': 'Stetson Hatters', 'SAM': 'Samford Bulldogs',
        'COLG': 'Colgate Raiders', 'UCSB': 'UC Santa Barbara Gauchos',
        'HALL': 'Seton Hall Pirates', 'ARIZ': 'Arizona Wildcats',
        'WCU': 'Western Carolina Catamounts', 'CAL': 'California Golden Bears',
        'SHSU': 'Sam Houston St Bearkats', 'HC': 'Holy Cross Crusaders',
        'ORU': 'Oral Roberts Golden Eagles', 'TXAM': 'Texas A&M Aggies',
        'UNCW': 'UNC Wilmington Seahawks', 'UCI': 'UC Irvine Anteaters',
        'DEL': 'Delaware Blue Hens', 'JMU': 'James Madison Dukes',
        'STNH': 'Stonehill Skyhawks', 'CIT': 'The Citadel Bulldogs',
        'BU': 'Boston Univ. Terriers', 'EVAN': 'Evansville Purple Aces',
        'UCSD': 'UC San Diego Tritons', 'MTST': 'Montana State Bobcats',
        'VALP': 'Valparaiso Beacons', 'TXSO': 'Texas Southern Tigers',
        'CHAR': 'Charlotte 49ers', 'DREX': 'Drexel Dragons',
        'ULL': "Louisiana Ragin' Cajuns", 'BRAD': 'Bradley Braves',
        'UVU': 'Utah Valley Wolverines', 'RICH': 'Richmond Spiders',
        'DAV': 'Davidson Wildcats', 'CSN': 'Charleston Southern Buccaneers',
        'FAU': 'Florida Atlantic Owls', 'ALA': 'Alabama Crimson Tide',
        'CREI': 'Creighton Bluejays', 'AAMU': 'Alabama A&M Bulldogs',
        'KU': 'Kansas Jayhawks', 'SJU': "Saint Joseph's Hawks",
        'ECU': 'East Carolina Pirates', 'WOF': 'Wofford Terriers',
        'UNT': 'North Texas Mean Green', 'UALR': 'Arkansas-Little Rock Trojans',
        'UCRV': 'UC Riverside Highlanders', 'UTSA': 'UTSA Roadrunners',
        'HP': 'High Point Panthers', 'UCD': 'UC Davis Aggies',
        'MER': 'Mercer Bears', 'USF': 'South Florida Bulls',
        'ISU': 'Iowa State Cyclones', 'TLSA': 'Tulsa Golden Hurricane',
        'UMES': 'Maryland-Eastern Shore Hawks', 'FAMU': 'Florida A&M Rattlers',
        'TOL': 'Toledo Rockets', 'UTT': 'UT-Arlington Mavericks',
        'SHU': 'Sacred Heart Pioneers', 'UNH': 'New Hampshire Wildcats',
        'CHAT': 'Chattanooga Mocs', 'MRSH': 'Marshall Thundering Herd',
        'SCUS': 'South Carolina Upstate Spartans', 'MORG': 'Morgan State Bears',
        'MRST': 'Marist Red Foxes', 'UWGB': 'Green Bay Phoenix',
        'VMI': 'VMI Keydets', 'UND': 'North Dakota Fighting Hawks',
        'CCSU': 'Central Connecticut St Blue Devils', 'INST': 'Indiana St Sycamores',
        'COOK': 'Bethune-Cookman Wildcats', 'WGEO': 'West Georgia Wolves',
        'HOU': 'Houston Cougars', 'ULM': 'UL Monroe Warhawks',
        'CCAR': 'Coastal Carolina Chanticleers', 'MSM': "Mt. St. Mary's Mountaineers",
        'PAC': 'Pacific Tigers', 'MORE': 'Morehead State Eagles',
        'VAN': 'Vanderbilt Commodores', 'NCCU': 'North Carolina Central Eagles',
        'CSB': 'CSU Bakersfield Roadrunners', 'CBU': 'Cal Baptist Lancers',
        'NEOM': 'Omaha Mavericks', 'COFC': 'Charleston Cougars',
        'LIP': 'Lipscomb Bisons', 'JOES': "Saint Joseph's Hawks",
        'GT': 'Georgia Tech Yellow Jackets', 'GAST': 'Georgia St Panthers',
        'DSU': 'Delaware St Hornets', 'ND': 'Notre Dame Fighting Irish',
        'USA': 'South Alabama Jaguars', 'QUC': 'Quinnipiac Bobcats',
        'UNO': 'Omaha Mavericks', 'BRY': 'Bryant Bulldogs',
        'EKY': 'Eastern Kentucky Colonels', 'ARMY': 'Army Knights',
        'ARST': 'Arkansas St Red Wolves', 'SPC': 'St. Peter\'s Peacocks',
        'NICH': 'Nicholls St Colonels', 'SDAK': 'South Dakota Coyotes',
        'SFPA': 'St. Francis (PA) Red Flash', 'BEL': 'Belmont Bruins',
        'PRIN': 'Princeton Tigers', 'QUIN': 'Quinnipiac Bobcats',
        'COR': 'Cornell Big Red', 'HCU': 'Houston Christian Huskies',
        'BING': 'Binghamton Bearcats', 'COPP': 'Coppin State Eagles',
        'NIAG': 'Niagara Purple Eagles', 'UNA': 'North Alabama Lions',
        'TXST': 'Texas State Bobcats', 'SIUE': 'SIU Edwardsville Cougars',
        'LAM': 'Lamar Cardinals', 'NORF': 'Norfolk State Spartans',
        'CLMB': 'Columbia Lions', 'DART': 'Dartmouth Big Green',
        'BRWN': 'Brown Bears', 'APP': 'Appalachian St Mountaineers',
        'NOP': 'New Orleans Privateers', 'WSU': 'Wichita St Shockers',
        'SCST': 'South Carolina St Bulldogs', 'IONA': 'Iona Gaels',
        'UST': 'St. Thomas (MN) Tommies', 'IUPU': 'IUPUI Jaguars',
        'ME': 'Maine Black Bears', 'UWM': 'Milwaukee Panthers',
        'WEBB': 'Gardner-Webb Bulldogs', 'PEPP': 'Pepperdine Waves',
        'CHS': 'Charleston Southern Buccaneers', 'LONG': 'Longwood Lancers',
        'USD': 'San Diego Toreros', 'LMU': 'Loyola Marymount Lions',
        'POR': 'Portland Pilots', 'RAD': 'Radford Highlanders',
        'NEWH': 'New Hampshire Wildcats', 'CSF': 'CSU Fullerton Titans',
        'FDU': 'Fairleigh Dickinson Knights', 'CHSO': 'Charleston Southern Buccaneers',
        'SF': 'San Francisco Dons', 'HAW': "Hawai'i Rainbow Warriors",
        'MAN': 'Manhattan Jaspers', 'CAN': 'Canisius Golden Griffins',
        'SUNY D': 'Albany Great Danes',
    },
    'ncaaf': {
        # Reuse many of the same school codes
        'ASU': 'Arizona St Sun Devils', 'BAY': 'Baylor Bears', 'BSU': 'Boise State Broncos',
        'CLEM': 'Clemson Tigers', 'DUKE': 'Duke Blue Devils', 'FSU': 'Florida St Seminoles',
        'LSU': 'LSU Tigers', 'MSU': 'Michigan St Spartans', 'OSU': 'Ohio State Buckeyes',
        'PSU': 'Penn State Nittany Lions', 'TCU': 'TCU Horned Frogs', 'TTU': 'Texas Tech Red Raiders',
        'UCLA': 'UCLA Bruins', 'UGA': 'Georgia Bulldogs', 'UK': 'Kentucky Wildcats',
        'USC': 'USC Trojans', 'VT': 'Virginia Tech Hokies',
    },
}

# Reverse map: full name → abbreviation (first match)
FULL_TO_ABBREV = {}
for league, teams in ABBREV_TO_FULL.items():
    for abbrev, full in teams.items():
        if full not in FULL_TO_ABBREV:
            FULL_TO_ABBREV[full] = abbrev

# Nickname/city/variant → (league, full_name) for fuzzy matching
# Covers: nicknames ("Lakers"), city names ("Boston"), common variants ("Cavs")
NICKNAME_TO_FULL = {
    'nba': {
        'hawks': 'Atlanta Hawks', 'celtics': 'Boston Celtics', 'nets': 'Brooklyn Nets',
        'hornets': 'Charlotte Hornets', 'bulls': 'Chicago Bulls', 'cavaliers': 'Cleveland Cavaliers',
        'cavs': 'Cleveland Cavaliers', 'mavericks': 'Dallas Mavericks', 'mavs': 'Dallas Mavericks',
        'nuggets': 'Denver Nuggets', 'pistons': 'Detroit Pistons', 'warriors': 'Golden State Warriors',
        'rockets': 'Houston Rockets', 'pacers': 'Indiana Pacers', 'clippers': 'Los Angeles Clippers',
        'lakers': 'Los Angeles Lakers', 'grizzlies': 'Memphis Grizzlies', 'heat': 'Miami Heat',
        'bucks': 'Milwaukee Bucks', 'timberwolves': 'Minnesota Timberwolves', 'wolves': 'Minnesota Timberwolves',
        'pelicans': 'New Orleans Pelicans', 'knicks': 'New York Knicks', 'thunder': 'Oklahoma City Thunder',
        'magic': 'Orlando Magic', '76ers': 'Philadelphia 76ers', 'sixers': 'Philadelphia 76ers',
        'suns': 'Phoenix Suns', 'trail blazers': 'Portland Trail Blazers', 'blazers': 'Portland Trail Blazers',
        'kings': 'Sacramento Kings', 'spurs': 'San Antonio Spurs', 'raptors': 'Toronto Raptors',
        'jazz': 'Utah Jazz', 'wizards': 'Washington Wizards',
        # City-only
        'atlanta': 'Atlanta Hawks', 'boston': 'Boston Celtics', 'brooklyn': 'Brooklyn Nets',
        'charlotte': 'Charlotte Hornets', 'chicago': 'Chicago Bulls', 'cleveland': 'Cleveland Cavaliers',
        'dallas': 'Dallas Mavericks', 'denver': 'Denver Nuggets', 'detroit': 'Detroit Pistons',
        'golden state': 'Golden State Warriors', 'houston': 'Houston Rockets', 'indiana': 'Indiana Pacers',
        'memphis': 'Memphis Grizzlies', 'miami': 'Miami Heat', 'milwaukee': 'Milwaukee Bucks',
        'minnesota': 'Minnesota Timberwolves', 'new orleans': 'New Orleans Pelicans',
        'new york': 'New York Knicks', 'oklahoma city': 'Oklahoma City Thunder',
        'orlando': 'Orlando Magic', 'philadelphia': 'Philadelphia 76ers', 'phoenix': 'Phoenix Suns',
        'portland': 'Portland Trail Blazers', 'sacramento': 'Sacramento Kings',
        'san antonio': 'San Antonio Spurs', 'toronto': 'Toronto Raptors', 'utah': 'Utah Jazz',
        'washington': 'Washington Wizards',
    },
    'nfl': {
        'cardinals': 'Arizona Cardinals', 'falcons': 'Atlanta Falcons', 'ravens': 'Baltimore Ravens',
        'bills': 'Buffalo Bills', 'panthers': 'Carolina Panthers', 'bears': 'Chicago Bears',
        'bengals': 'Cincinnati Bengals', 'browns': 'Cleveland Browns', 'cowboys': 'Dallas Cowboys',
        'broncos': 'Denver Broncos', 'lions': 'Detroit Lions', 'packers': 'Green Bay Packers',
        'texans': 'Houston Texans', 'colts': 'Indianapolis Colts', 'jaguars': 'Jacksonville Jaguars',
        'jags': 'Jacksonville Jaguars', 'chiefs': 'Kansas City Chiefs', 'raiders': 'Las Vegas Raiders',
        'chargers': 'Los Angeles Chargers', 'rams': 'Los Angeles Rams', 'dolphins': 'Miami Dolphins',
        'vikings': 'Minnesota Vikings', 'patriots': 'New England Patriots', 'pats': 'New England Patriots',
        'saints': 'New Orleans Saints', 'giants': 'New York Giants', 'jets': 'New York Jets',
        'eagles': 'Philadelphia Eagles', 'steelers': 'Pittsburgh Steelers',
        '49ers': 'San Francisco 49ers', 'niners': 'San Francisco 49ers',
        'seahawks': 'Seattle Seahawks', 'buccaneers': 'Tampa Bay Buccaneers', 'bucs': 'Tampa Bay Buccaneers',
        'titans': 'Tennessee Titans', 'commanders': 'Washington Commanders',
        # City-only
        'arizona': 'Arizona Cardinals', 'atlanta': 'Atlanta Falcons', 'baltimore': 'Baltimore Ravens',
        'buffalo': 'Buffalo Bills', 'carolina': 'Carolina Panthers', 'chicago': 'Chicago Bears',
        'cincinnati': 'Cincinnati Bengals', 'cleveland': 'Cleveland Browns', 'dallas': 'Dallas Cowboys',
        'denver': 'Denver Broncos', 'detroit': 'Detroit Lions', 'green bay': 'Green Bay Packers',
        'houston': 'Houston Texans', 'indianapolis': 'Indianapolis Colts',
        'jacksonville': 'Jacksonville Jaguars', 'kansas city': 'Kansas City Chiefs',
        'las vegas': 'Las Vegas Raiders', 'miami': 'Miami Dolphins', 'minnesota': 'Minnesota Vikings',
        'new england': 'New England Patriots', 'new orleans': 'New Orleans Saints',
        'philadelphia': 'Philadelphia Eagles', 'pittsburgh': 'Pittsburgh Steelers',
        'san francisco': 'San Francisco 49ers', 'seattle': 'Seattle Seahawks',
        'tampa bay': 'Tampa Bay Buccaneers', 'tennessee': 'Tennessee Titans',
        'washington': 'Washington Commanders',
    },
    'nhl': {
        'ducks': 'Anaheim Ducks', 'coyotes': 'Arizona Coyotes', 'bruins': 'Boston Bruins',
        'sabres': 'Buffalo Sabres', 'flames': 'Calgary Flames', 'hurricanes': 'Carolina Hurricanes',
        'canes': 'Carolina Hurricanes', 'blackhawks': 'Chicago Blackhawks',
        'avalanche': 'Colorado Avalanche', 'avs': 'Colorado Avalanche',
        'blue jackets': 'Columbus Blue Jackets', 'stars': 'Dallas Stars',
        'red wings': 'Detroit Red Wings', 'oilers': 'Edmonton Oilers',
        'panthers': 'Florida Panthers', 'kings': 'Los Angeles Kings',
        'wild': 'Minnesota Wild', 'canadiens': 'Montreal Canadiens', 'habs': 'Montreal Canadiens',
        'predators': 'Nashville Predators', 'preds': 'Nashville Predators',
        'devils': 'New Jersey Devils', 'islanders': 'New York Islanders', 'isles': 'New York Islanders',
        'rangers': 'New York Rangers', 'senators': 'Ottawa Senators', 'sens': 'Ottawa Senators',
        'flyers': 'Philadelphia Flyers', 'penguins': 'Pittsburgh Penguins', 'pens': 'Pittsburgh Penguins',
        'sharks': 'San Jose Sharks', 'kraken': 'Seattle Kraken',
        'blues': 'St. Louis Blues', 'lightning': 'Tampa Bay Lightning', 'bolts': 'Tampa Bay Lightning',
        'maple leafs': 'Toronto Maple Leafs', 'leafs': 'Toronto Maple Leafs',
        'canucks': 'Vancouver Canucks', 'golden knights': 'Vegas Golden Knights',
        'knights': 'Vegas Golden Knights', 'capitals': 'Washington Capitals', 'caps': 'Washington Capitals',
        'jets': 'Winnipeg Jets',
        # City-only
        'anaheim': 'Anaheim Ducks', 'boston': 'Boston Bruins', 'buffalo': 'Buffalo Sabres',
        'calgary': 'Calgary Flames', 'carolina': 'Carolina Hurricanes', 'chicago': 'Chicago Blackhawks',
        'colorado': 'Colorado Avalanche', 'columbus': 'Columbus Blue Jackets', 'dallas': 'Dallas Stars',
        'detroit': 'Detroit Red Wings', 'edmonton': 'Edmonton Oilers', 'florida': 'Florida Panthers',
        'minnesota': 'Minnesota Wild', 'montreal': 'Montreal Canadiens',
        'nashville': 'Nashville Predators', 'new jersey': 'New Jersey Devils',
        'ottawa': 'Ottawa Senators', 'philadelphia': 'Philadelphia Flyers',
        'pittsburgh': 'Pittsburgh Penguins', 'san jose': 'San Jose Sharks',
        'seattle': 'Seattle Kraken', 'st. louis': 'St. Louis Blues', 'st louis': 'St. Louis Blues',
        'tampa bay': 'Tampa Bay Lightning', 'toronto': 'Toronto Maple Leafs',
        'vancouver': 'Vancouver Canucks', 'vegas': 'Vegas Golden Knights',
        'washington': 'Washington Capitals', 'winnipeg': 'Winnipeg Jets',
    },
    'mlb': {
        'diamondbacks': 'Arizona Diamondbacks', 'dbacks': 'Arizona Diamondbacks',
        'd-backs': 'Arizona Diamondbacks', 'braves': 'Atlanta Braves',
        'orioles': 'Baltimore Orioles', 'red sox': 'Boston Red Sox',
        'cubs': 'Chicago Cubs', 'white sox': 'Chicago White Sox',
        'reds': 'Cincinnati Reds', 'guardians': 'Cleveland Guardians',
        'rockies': 'Colorado Rockies', 'tigers': 'Detroit Tigers',
        'astros': 'Houston Astros', 'royals': 'Kansas City Royals',
        'angels': 'Los Angeles Angels', 'dodgers': 'Los Angeles Dodgers',
        'marlins': 'Miami Marlins', 'brewers': 'Milwaukee Brewers',
        'twins': 'Minnesota Twins', 'mets': 'New York Mets',
        'yankees': 'New York Yankees', 'yanks': 'New York Yankees',
        'athletics': 'Oakland Athletics', "a's": 'Oakland Athletics',
        'phillies': 'Philadelphia Phillies', 'pirates': 'Pittsburgh Pirates',
        'padres': 'San Diego Padres', 'giants': 'San Francisco Giants',
        'mariners': 'Seattle Mariners', 'cardinals': 'St. Louis Cardinals',
        'rays': 'Tampa Bay Rays', 'rangers': 'Texas Rangers',
        'blue jays': 'Toronto Blue Jays', 'jays': 'Toronto Blue Jays',
        'nationals': 'Washington Nationals', 'nats': 'Washington Nationals',
        # City-only
        'arizona': 'Arizona Diamondbacks', 'atlanta': 'Atlanta Braves',
        'baltimore': 'Baltimore Orioles', 'boston': 'Boston Red Sox',
        'chicago': 'Chicago Cubs',  # Ambiguous but Cubs more common in context
        'cincinnati': 'Cincinnati Reds', 'cleveland': 'Cleveland Guardians',
        'colorado': 'Colorado Rockies', 'detroit': 'Detroit Tigers',
        'houston': 'Houston Astros', 'kansas city': 'Kansas City Royals',
        'miami': 'Miami Marlins', 'milwaukee': 'Milwaukee Brewers',
        'minnesota': 'Minnesota Twins', 'new york': 'New York Yankees',
        'oakland': 'Oakland Athletics', 'philadelphia': 'Philadelphia Phillies',
        'pittsburgh': 'Pittsburgh Pirates', 'san diego': 'San Diego Padres',
        'san francisco': 'San Francisco Giants', 'seattle': 'Seattle Mariners',
        'st. louis': 'St. Louis Cardinals', 'st louis': 'St. Louis Cardinals',
        'tampa bay': 'Tampa Bay Rays', 'texas': 'Texas Rangers',
        'toronto': 'Toronto Blue Jays', 'washington': 'Washington Nationals',
    },
    'wnba': {
        'dream': 'Atlanta Dream', 'sky': 'Chicago Sky', 'sun': 'Connecticut Sun',
        'wings': 'Dallas Wings', 'valkyries': 'Golden State Valkyries',
        'comets': 'Houston Comets', 'fever': 'Indiana Fever',
        'sparks': 'Los Angeles Sparks', 'aces': 'Las Vegas Aces',
        'lynx': 'Minnesota Lynx', 'liberty': 'New York Liberty',
        'mercury': 'Phoenix Mercury', 'storm': 'Seattle Storm',
        'mystics': 'Washington Mystics',
        # Historical
        'sting': 'Charlotte Sting', 'rockers': 'Cleveland Rockers',
        'shock': 'Detroit Shock', 'sol': 'Miami Sol', 'miracle': 'Orlando Miracle',
        'fire': 'Portland Fire', 'monarchs': 'Sacramento Monarchs',
        'stars': 'San Antonio Stars', 'starzz': 'Utah Starzz',
        # City-only
        'atlanta': 'Atlanta Dream', 'chicago': 'Chicago Sky', 'connecticut': 'Connecticut Sun',
        'dallas': 'Dallas Wings', 'golden state': 'Golden State Valkyries',
        'houston': 'Houston Comets', 'indiana': 'Indiana Fever',
        'los angeles': 'Los Angeles Sparks', 'las vegas': 'Las Vegas Aces',
        'minnesota': 'Minnesota Lynx', 'new york': 'New York Liberty',
        'phoenix': 'Phoenix Mercury', 'seattle': 'Seattle Storm',
        'washington': 'Washington Mystics', 'san antonio': 'San Antonio Stars',
        'tulsa': 'Tulsa Shock', 'sacramento': 'Sacramento Monarchs',
        'detroit': 'Detroit Shock', 'cleveland': 'Cleveland Rockers',
        'charlotte': 'Charlotte Sting', 'miami': 'Miami Sol',
        'orlando': 'Orlando Miracle', 'portland': 'Portland Fire',
        'utah': 'Utah Starzz',
    },
    'epl': {
        'arsenal': 'Arsenal', 'aston villa': 'Aston Villa', 'bournemouth': 'AFC Bournemouth',
        'brentford': 'Brentford', 'brighton': 'Brighton and Hove Albion', 'chelsea': 'Chelsea',
        'crystal palace': 'Crystal Palace', 'everton': 'Everton', 'fulham': 'Fulham',
        'ipswich': 'Ipswich Town', 'leicester': 'Leicester City', 'liverpool': 'Liverpool',
        'man city': 'Manchester City', 'manchester city': 'Manchester City',
        'man utd': 'Manchester United', 'manchester united': 'Manchester United',
        'newcastle': 'Newcastle United', 'nottingham forest': 'Nottingham Forest',
        'southampton': 'Southampton', 'tottenham': 'Tottenham Hotspur', 'spurs': 'Tottenham Hotspur',
        'west ham': 'West Ham United', 'wolves': 'Wolverhampton Wanderers',
        'wolverhampton': 'Wolverhampton Wanderers',
    },
    'bundesliga': {
        'bayern': 'Bayern Munich', 'bayern munich': 'Bayern Munich', 'dortmund': 'Borussia Dortmund',
        'borussia dortmund': 'Borussia Dortmund', 'leipzig': 'RB Leipzig', 'leverkusen': 'Bayer Leverkusen',
        'gladbach': 'Borussia Monchengladbach', 'wolfsburg': 'VfL Wolfsburg',
        'freiburg': 'SC Freiburg', 'frankfurt': 'Eintracht Frankfurt',
        'hoffenheim': 'TSG Hoffenheim', 'union berlin': 'Union Berlin',
        'stuttgart': 'VfB Stuttgart', 'mainz': 'Mainz 05', 'augsburg': 'FC Augsburg',
        'bremen': 'Werder Bremen', 'bochum': 'VfL Bochum', 'heidenheim': 'Heidenheim',
    },
    'seriea': {
        'juventus': 'Juventus', 'inter': 'Inter Milan', 'inter milan': 'Inter Milan',
        'milan': 'AC Milan', 'ac milan': 'AC Milan', 'napoli': 'Napoli',
        'roma': 'AS Roma', 'lazio': 'Lazio', 'atalanta': 'Atalanta',
        'fiorentina': 'Fiorentina', 'bologna': 'Bologna', 'torino': 'Torino',
        'udinese': 'Udinese', 'empoli': 'Empoli', 'cagliari': 'Cagliari',
        'genoa': 'Genoa', 'lecce': 'Lecce', 'verona': 'Hellas Verona',
    },
    'laliga': {
        'real madrid': 'Real Madrid', 'barcelona': 'Barcelona', 'barca': 'Barcelona',
        'atletico madrid': 'Atletico Madrid', 'atletico': 'Atletico Madrid',
        'real sociedad': 'Real Sociedad', 'real betis': 'Real Betis',
        'villarreal': 'Villarreal', 'athletic bilbao': 'Athletic Bilbao',
        'sevilla': 'Sevilla', 'valencia': 'Valencia', 'celta vigo': 'Celta Vigo',
        'getafe': 'Getafe', 'osasuna': 'Osasuna', 'mallorca': 'Mallorca',
        'girona': 'Girona', 'alaves': 'Alaves', 'las palmas': 'Las Palmas',
        'rayo vallecano': 'Rayo Vallecano',
    },
    'ligue1': {
        'psg': 'Paris Saint-Germain', 'paris': 'Paris Saint-Germain',
        'lyon': 'Olympique Lyonnais', 'marseille': 'Olympique de Marseille',
        'monaco': 'AS Monaco', 'lille': 'Lille', 'rennes': 'Rennes',
        'nice': 'Nice', 'lens': 'RC Lens', 'strasbourg': 'Strasbourg',
        'nantes': 'Nantes', 'brest': 'Brest', 'toulouse': 'Toulouse',
        'montpellier': 'Montpellier', 'reims': 'Reims',
    },
    'ucl': {},
    'uel': {},
    'mls': {
        'atlanta united': 'Atlanta United', 'austin': 'Austin FC',
        'chicago fire': 'Chicago Fire', 'fc cincinnati': 'FC Cincinnati',
        'columbus crew': 'Columbus Crew', 'colorado rapids': 'Colorado Rapids',
        'fc dallas': 'FC Dallas', 'dc united': 'DC United',
        'houston dynamo': 'Houston Dynamo', 'la galaxy': 'LA Galaxy',
        'lafc': 'Los Angeles FC', 'inter miami': 'Inter Miami',
        'minnesota united': 'Minnesota United', 'cf montreal': 'CF Montreal',
        'nashville': 'Nashville SC', 'new england': 'New England Revolution',
        'nycfc': 'New York City FC', 'red bulls': 'New York Red Bulls',
        'orlando city': 'Orlando City', 'philadelphia union': 'Philadelphia Union',
        'portland timbers': 'Portland Timbers', 'real salt lake': 'Real Salt Lake',
        'san jose': 'San Jose Earthquakes', 'seattle sounders': 'Seattle Sounders',
        'sporting kc': 'Sporting Kansas City', 'st louis city': 'St. Louis City SC',
        'toronto fc': 'Toronto FC', 'vancouver': 'Vancouver Whitecaps',
    },
    'afl': {
        'adelaide': 'Adelaide Crows', 'crows': 'Adelaide Crows',
        'brisbane': 'Brisbane Lions', 'lions': 'Brisbane Lions',
        'carlton': 'Carlton', 'collingwood': 'Collingwood', 'magpies': 'Collingwood',
        'essendon': 'Essendon', 'bombers': 'Essendon',
        'fremantle': 'Fremantle', 'dockers': 'Fremantle',
        'geelong': 'Geelong Cats', 'cats': 'Geelong Cats',
        'gold coast': 'Gold Coast Suns', 'suns': 'Gold Coast Suns',
        'gws': 'GWS Giants', 'giants': 'GWS Giants',
        'hawthorn': 'Hawthorn', 'hawks': 'Hawthorn',
        'melbourne': 'Melbourne', 'demons': 'Melbourne',
        'north melbourne': 'North Melbourne', 'kangaroos': 'North Melbourne',
        'port adelaide': 'Port Adelaide', 'power': 'Port Adelaide',
        'richmond': 'Richmond', 'tigers': 'Richmond',
        'st kilda': 'St Kilda', 'saints': 'St Kilda',
        'sydney': 'Sydney Swans', 'swans': 'Sydney Swans',
        'west coast': 'West Coast Eagles', 'eagles': 'West Coast Eagles',
        'western bulldogs': 'Western Bulldogs', 'bulldogs': 'Western Bulldogs',
    },
    'nrl': {
        'broncos': 'Brisbane Broncos', 'raiders': 'Canberra Raiders',
        'bulldogs': 'Canterbury Bulldogs', 'sharks': 'Cronulla Sharks',
        'dolphins': 'Dolphins', 'titans': 'Gold Coast Titans',
        'sea eagles': 'Manly Sea Eagles', 'storm': 'Melbourne Storm',
        'knights': 'Newcastle Knights', 'cowboys': 'North Queensland Cowboys',
        'eels': 'Parramatta Eels', 'panthers': 'Penrith Panthers',
        'rabbitohs': 'South Sydney Rabbitohs', 'dragons': 'St George Illawarra Dragons',
        'roosters': 'Sydney Roosters', 'warriors': 'New Zealand Warriors',
        'wests tigers': 'Wests Tigers',
    },
    'mma': {},
    'ncaab': {
        # Single-word school names → canonical with mascot
        'akron': 'Akron Zips', 'alabama': 'Alabama Crimson Tide', 'arizona': 'Arizona Wildcats',
        'arkansas': 'Arkansas Razorbacks', 'auburn': 'Auburn Tigers', 'baylor': 'Baylor Bears',
        'belmont': 'Belmont Bruins', 'brown': 'Brown Bears', 'bryant': 'Bryant Bulldogs',
        'bucknell': 'Bucknell Bison', 'buffalo': 'Buffalo Bulls', 'butler': 'Butler Bulldogs',
        'california': 'California Golden Bears', 'charlotte': 'Charlotte 49ers',
        'chattanooga': 'Chattanooga Mocs', 'cincinnati': 'Cincinnati Bearcats',
        'clemson': 'Clemson Tigers', 'colgate': 'Colgate Raiders', 'colorado': 'Colorado Buffaloes',
        'columbia': 'Columbia Lions', 'cornell': 'Cornell Big Red', 'creighton': 'Creighton Bluejays',
        'dartmouth': 'Dartmouth Big Green', 'davidson': 'Davidson Wildcats', 'dayton': 'Dayton Flyers',
        'delaware': 'Delaware Blue Hens', 'denver': 'Denver Pioneers', 'depaul': 'DePaul Blue Demons',
        'detroit': 'Detroit Mercy Titans', 'drake': 'Drake Bulldogs', 'drexel': 'Drexel Dragons',
        'duke': 'Duke Blue Devils', 'duquesne': 'Duquesne Dukes', 'elon': 'Elon Phoenix',
        'evansville': 'Evansville Purple Aces', 'fairfield': 'Fairfield Stags',
        'florida': 'Florida Gators', 'fordham': 'Fordham Rams', 'furman': 'Furman Paladins',
        'georgia': 'Georgia Bulldogs', 'gonzaga': 'Gonzaga Bulldogs', 'hampton': 'Hampton Pirates',
        'harvard': 'Harvard Crimson', 'hofstra': 'Hofstra Pride', 'houston': 'Houston Cougars',
        'howard': 'Howard Bison', 'idaho': 'Idaho Vandals', 'illinois': 'Illinois Fighting Illini',
        'indiana': 'Indiana Hoosiers', 'iowa': 'Iowa Hawkeyes', 'kansas': 'Kansas Jayhawks',
        'kentucky': 'Kentucky Wildcats', 'lafayette': 'Lafayette Leopards',
        'lehigh': 'Lehigh Mountain Hawks', 'liberty': 'Liberty Flames',
        'lipscomb': 'Lipscomb Bisons', 'longwood': 'Longwood Lancers',
        'louisville': 'Louisville Cardinals', 'maine': 'Maine Black Bears',
        'manhattan': 'Manhattan Jaspers', 'marquette': 'Marquette Golden Eagles',
        'marshall': 'Marshall Thundering Herd', 'maryland': 'Maryland Terrapins',
        'massachusetts': 'Massachusetts Minutemen', 'memphis': 'Memphis Tigers',
        'mercer': 'Mercer Bears', 'mercyhurst': 'Mercyhurst Lakers',
        'merrimack': 'Merrimack Warriors', 'miami': 'Miami Hurricanes',
        'michigan': 'Michigan Wolverines', 'minnesota': 'Minnesota Golden Gophers',
        'mississippi': 'Ole Miss Rebels', 'missouri': 'Missouri Tigers',
        'monmouth': 'Monmouth Hawks', 'montana': 'Montana Grizzlies',
        'navy': 'Navy Midshipmen', 'nebraska': 'Nebraska Cornhuskers',
        'nevada': 'Nevada Wolf Pack', 'niagara': 'Niagara Purple Eagles',
        'northeastern': 'Northeastern Huskies', 'northwestern': 'Northwestern Wildcats',
        'oakland': 'Oakland Golden Grizzlies', 'ohio': 'Ohio Bobcats',
        'oklahoma': 'Oklahoma Sooners', 'oregon': 'Oregon Ducks',
        'pacific': 'Pacific Tigers', 'pepperdine': 'Pepperdine Waves',
        'pittsburgh': 'Pittsburgh Panthers', 'portland': 'Portland Pilots',
        'princeton': 'Princeton Tigers', 'providence': 'Providence Friars',
        'purdue': 'Purdue Boilermakers', 'quinnipiac': 'Quinnipiac Bobcats',
        'rice': 'Rice Owls', 'richmond': 'Richmond Spiders', 'rider': 'Rider Broncs',
        'rutgers': 'Rutgers Scarlet Knights', 'samford': 'Samford Bulldogs',
        'seattle': 'Seattle Redhawks', 'siena': 'Siena Saints',
        'stanford': 'Stanford Cardinal', 'stetson': 'Stetson Hatters',
        'syracuse': 'Syracuse Orange', 'temple': 'Temple Owls',
        'tennessee': 'Tennessee Volunteers', 'texas': 'Texas Longhorns',
        'toledo': 'Toledo Rockets', 'towson': 'Towson Tigers',
        'troy': 'Troy Trojans', 'tulane': 'Tulane Green Wave',
        'tulsa': 'Tulsa Golden Hurricane', 'utah': 'Utah Utes',
        'valparaiso': 'Valparaiso Beacons', 'vanderbilt': 'Vanderbilt Commodores',
        'vermont': 'Vermont Catamounts', 'villanova': 'Villanova Wildcats',
        'virginia': 'Virginia Cavaliers', 'wagner': 'Wagner Seahawks',
        'washington': 'Washington Huskies', 'wisconsin': 'Wisconsin Badgers',
        'wofford': 'Wofford Terriers', 'wyoming': 'Wyoming Cowboys',
        'xavier': 'Xavier Musketeers', 'yale': 'Yale Bulldogs',
        # Common variants
        'uconn': 'UConn Huskies', 'connecticut': 'UConn Huskies',
        'ole miss': 'Ole Miss Rebels', 'notre dame': 'Notre Dame Fighting Irish',
        'st. marys': "Saint Mary's Gaels", 'saint marys': "Saint Mary's Gaels",
        'southern methodist': 'SMU Mustangs',
        'texas a&m': 'Texas A&M Aggies', 'michigan state': 'Michigan St Spartans',
        'ohio state': 'Ohio State Buckeyes', 'penn state': 'Penn State Nittany Lions',
        'florida state': 'Florida St Seminoles', 'kansas state': 'Kansas St Wildcats',
        'oklahoma state': 'Oklahoma St Cowboys', 'oregon state': 'Oregon St Beavers',
        'virginia tech': 'Virginia Tech Hokies', 'wake forest': 'Wake Forest Demon Deacons',
        'boston college': 'Boston College Eagles', 'west virginia': 'West Virginia Mountaineers',
        'north carolina': 'North Carolina Tar Heels', 'nc state': 'NC State Wolfpack',
        'georgia tech': 'Georgia Tech Yellow Jackets',
        'san diego state': 'San Diego St Aztecs', 'fresno state': 'Fresno St Bulldogs',
        'boise state': 'Boise State Broncos',
        # Partial names that show up from various sources
        'santa clara': 'Santa Clara Broncos', 'weber state': 'Weber State Wildcats',
        'arizona state': 'Arizona St Sun Devils', 'wright state': 'Wright State Raiders',
        'oregon state': 'Oregon St Beavers',
    },
    'ncaaf': {},
}


def to_full_name(abbrev, league=None):
    """Convert abbreviation to full team name. Returns abbrev if not found."""
    if not abbrev:
        return abbrev
    upper = abbrev.upper()
    if league:
        m = ABBREV_TO_FULL.get(league.lower(), {})
        if upper in m:
            return m[upper]
    for m in ABBREV_TO_FULL.values():
        if upper in m:
            return m[upper]
    return abbrev


def normalize_to_full(team_name, league=None):
    """
    Normalize any team name to full display name.
    Handles: full names, abbreviations, nicknames, city names.
    """
    if not team_name:
        return team_name
    # Strip whitespace
    team_name = team_name.strip()
    # Check if it's already a known full name
    if team_name in FULL_TO_ABBREV:
        return team_name
    # Try as abbreviation (e.g., "LAL" → "Los Angeles Lakers")
    upper = team_name.upper()
    if league:
        m = ABBREV_TO_FULL.get(league.lower(), {})
        if upper in m:
            return m[upper]
    # Only fall through to other leagues if the requested league has NO mappings
    # This prevents cross-sport contamination (e.g., NCAAB "SEA" → "Seattle Seahawks")
    if not league or not ABBREV_TO_FULL.get(league.lower() if league else '', {}):
        for m in ABBREV_TO_FULL.values():
            if upper in m:
                return m[upper]
    # Try as nickname/city (e.g., "Lakers" → "Los Angeles Lakers")
    lower = team_name.lower().strip()
    if league:
        nick_map = NICKNAME_TO_FULL.get(league.lower(), {})
        if lower in nick_map:
            return nick_map[lower]
    # Only fall through to other leagues if the requested league has NO nickname mappings
    if not league or not NICKNAME_TO_FULL.get(league.lower() if league else '', {}):
        for nick_map in NICKNAME_TO_FULL.values():
            if lower in nick_map:
                return nick_map[lower]
    # No match — return as-is
    return team_name
