#!/usr/bin/env python3
"""
Parse the pasted APR data and match it to team names from CSV
"""
import csv
import re

def load_team_mappings():
    """Load team name mappings from CSV"""
    mappings = {}
    team_variations = {}
    
    with open('cfb_mastersheet.csv', 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        for row in reader:
            flair_name = row.get('flair_name', '').strip()
            image_source = row.get('image_source', '').strip()
            abbreviated = row.get('flair_abbreviated', '').strip()
            
            if flair_name and image_source and image_source.startswith('cfb/'):
                # Extract school name (without mascot)
                parts = flair_name.split()
                if len(parts) >= 2:
                    school_name = ' '.join(parts[:-1])
                    
                    mappings[flair_name] = {
                        'school_name': school_name,
                        'abbreviated': abbreviated
                    }
                    
                    # Store variations
                    team_variations[school_name] = flair_name
                    if abbreviated:
                        team_variations[abbreviated] = flair_name
                    team_variations[flair_name] = flair_name
    
    return mappings, team_variations

def parse_apr_text(text):
    """Parse APR data from pasted text"""
    apr_data = {}
    
    # Pattern to match: "Rank Team Name" followed by "Latest APR (2023-2024): score"
    # Or: "T13 Notre Dame Fighting Irish" with "Latest APR (2023-2024): 990"
    
    # Split by lines and process
    lines = text.split('\n')
    
    current_team = None
    for i, line in enumerate(lines):
        # Look for team name lines (start with number or T)
        team_match = re.match(r'^(T?\d+)\s+(.+?)(?:\s+Last Year|$)', line)
        if team_match:
            team_name = team_match.group(2).strip()
            # Clean up team name
            team_name = re.sub(r'\s+', ' ', team_name)
            current_team = team_name
        
        # Look for APR score
        apr_match = re.search(r'Latest APR \(2023-2024\):\s*(\d{3,4})', line)
        if apr_match and current_team:
            apr_score = int(apr_match.group(1))
            apr_data[current_team] = apr_score
            current_team = None
    
    # Also try pattern matching for lines that have both team and score
    for line in lines:
        # Pattern: "1 Ohio State Buckeyes ... Latest APR (2023-2024): 1000"
        match = re.search(r'^(?:T?\d+)\s+([A-Z][A-Za-z\s&\-\']+?)\s+.*?Latest APR \(2023-2024\):\s*(\d{3,4})', line)
        if match:
            team_name = match.group(1).strip()
            apr_score = int(match.group(2))
            apr_data[team_name] = apr_score
    
    return apr_data

def match_apr_to_teams(apr_data, team_mappings, team_variations):
    """Match APR data to team names"""
    matched = {}
    unmatched = []
    
    for apr_team_name, apr_score in apr_data.items():
        matched_team = None
        
        # Try exact match first
        if apr_team_name in team_mappings:
            matched_team = apr_team_name
        elif apr_team_name in team_variations:
            matched_team = team_variations[apr_team_name]
        else:
            # Try fuzzy matching
            apr_lower = apr_team_name.lower()
            
            # Remove common suffixes for matching
            apr_clean = re.sub(r'\s+(buckeyes|crimson tide|tar heels|wolverines|tigers|demon deacons|bearcats|wildcats|falcons|golden gophers|badgers|cyclones|fighting irish|seminoles|owls|blue devils|wolfpack|knights|eagles|broncos|green wave|longhorns|cowboys|cardinal|sun devils|utes|rebels|razorbacks|gamecocks|gators|volunteers|commodores|bulldogs|mountaineers|red raiders|horned frogs|aggies|wildcats|buffaloes|cougars|spartans|hoosiers|fighting illini|cornhuskers|terrapins|scarlet knights|boilermakers|hawkeyes|huskies|trojans|bruins|beavers|aztecs|jaguars|thundering herd|bobcats|blue raiders|redhawks|rams|orange|panthers|monarchs|chanticleers|eagles|miners|lobos|golden flashes|red wolves|rainbow warriors|nittany lions|minutemen|blazers|chippewas|golden hurricane|golden eagles|bears|zips|black knights|midshipmen|mean green|roadrunners|hilltoppers)$', '', apr_lower, flags=re.IGNORECASE)
            
            best_match = None
            best_score = 0
            
            for team_name, data in team_mappings.items():
                school_lower = data['school_name'].lower()
                team_lower = team_name.lower()
                
                # Check various matching strategies
                score = 0
                
                # Exact match
                if apr_lower == team_lower or apr_lower == school_lower:
                    score = 100
                # Contains match
                elif apr_lower in team_lower or team_lower in apr_lower:
                    score = 80
                elif apr_clean in school_lower or school_lower in apr_clean:
                    score = 70
                # Word overlap
                elif any(word in team_lower for word in apr_lower.split() if len(word) > 3):
                    score = 50
                
                if score > best_score:
                    best_score = score
                    best_match = team_name
            
            if best_match and best_score >= 50:
                matched_team = best_match
        
        if matched_team:
            matched[matched_team] = apr_score
        else:
            unmatched.append((apr_team_name, apr_score))
    
    return matched, unmatched

# Pasted APR data
pasted_data = """tablescraper-selected-row	tablescraper-selected-row 2

It's been lost in the discussion, but even with the transfer portal, and the NIL, and the professionalization of the sport it still COLLEGE football.These guys are supposed to go to class and, maybe, learn stuff. That's where the Academic Progress Rate comes in.The NCAA APR Rankings look at the academic calendar of the previous year - 2023-2024, in this case - for all sports at every school. How many players stayed in school, and how many remained in good academic standing, stayed eligible, and ...No, come back. This matters if you're a college football fan.	is

Two seasons ago, a 5-7 Minnesota team got to play in the Quick Lane Bowl because of its APR.You need to win six games to be eligible for a bowl. If there aren't enough teams available, the five-win team with the highest APR usually gets the bowl slot. - basically, every student-athlete on scholarship in some way gets a point by staying in school and staying academically eligible.	Go here to find out exactly how it's calculated

NCAA APR Rankings 2025: 1 to 136	

	

Note: There's one other key aspect to this - you have to maintain a certain level to be eligible to go to a bowl game.  is currently ineligible for the postseason, along with a few other penalties.	Akron

1 Ohio State Buckeyes	

Last Year's APR Ranking: 1 APR (2022-2023) 1000	Latest APR (2023-2024): 1000

2 Alabama Crimson Tide	

Last Year's APR Ranking: 2 APR (2022-2023) 997	Latest APR (2023-2024): 998

T3 North Carolina Tar Heels	

Last Year's APR Ranking: T3 APR (2022-2023) 996	Latest APR (2023-2024): 996

T3 Michigan Wolverines	

Last Year's APR Ranking: T7 APR (2022-2023) 993	Latest APR (2023-2024): 996

T5 Clemson Tigers	

Last Year's APR Ranking: 5 APR (2022-2023) 995	Latest APR (2023-2024): 995

T5 Wake Forest Demon Deacons	

Last Year's APR Ranking: 12 APR (2022-2023) 991	Latest APR (2023-2024): 995

7 Cincinnati Bearcats	

Last Year's APR Ranking: 6 APR (2022-2023) 994	Latest APR (2023-2024): 994

8 Northwestern Wildcats	

Last Year's APR Ranking: T3 APR (2022-2023) 996	Latest APR (2023-2024): 993

T9 Air Force Falcons	

Last Year's APR Ranking: T9 APR (2022-2023) 992	Latest APR (2023-2024): 992

T9 Minnesota Golden Gophers	

Last Year's APR Ranking: T9 APR (2022-2023) 992	Latest APR (2023-2024): 992

T11 Wisconsin Badgers	

Last Year's APR Ranking: T7 APR (2022-2023) 993	Latest APR (2023-2024): 991

T11 Iowa State Cyclones	

Last Year's APR Ranking: T15 APR (2022-2023) 988	Latest APR (2023-2024): 991

T13 Notre Dame Fighting Irish	

Last Year's APR Ranking: T9 APR (2022-2023) 992	Latest APR (2023-2024): 990

T13 Kansas State Wildcats	

Last Year's APR Ranking: T13 APR (2022-2023) 990	Latest APR (2023-2024): 990

T13 Auburn Tigers	

Last Year's APR Ranking: T20 APR (2022-2023) 986	Latest APR (2023-2024): 990

T13 Florida State Seminoles	

Last Year's APR Ranking: T32 APR (2022-2023) 982	Latest APR (2023-2024): 990

17 Missouri Tigers	

Last Year's APR Ranking: T13 APR (2022-2023) 990	Latest APR (2023-2024): 989

18 Rice Owls	

Last Year's APR Ranking: T15 APR (2022-2023) 988	Latest APR (2023-2024): 988

T19 Duke Blue Devils	

Last Year's APR Ranking: T17 APR (2022-2023) 987	Latest APR (2023-2024): 987

T19 NC State Wolfpack	

Last Year's APR Ranking: T26 APR (2022-2023) 984	Latest APR (2023-2024): 987

T21 UCF Knights	

Last Year's APR Ranking: T22 APR (2022-2023) 985	Latest APR (2023-2024): 986

T21 Boston College Eagles	

Last Year's APR Ranking: T26 APR (2022-2023) 984	Latest APR (2023-2024): 986

T21 Boise State Bronocs	

Last Year's APR Ranking: T28 APR (2022-2023) 983	Latest APR (2023-2024): 986

T21 Tulane Green Wave	

Last Year's APR Ranking: T32 APR (2022-2023) 982	Latest APR (2023-2024): 986

T21 Miami Hurricanes	

Last Year's APR Ranking: T38 APR (2022-2023) 981	Latest APR (2023-2024): 986

T21 Texas Longhorns	

Last Year's APR Ranking: T43 APR (2022-2023) 980	Latest APR (2023-2024): 986

T21 Oklahoma State Cowboys	

Last Year's APR Ranking: T48 APR (2022-2023) 978	Latest APR (2023-2024): 986

T28 Stanford Cardinal	

Last Year's APR Ranking: T20 APR (2022-2023) 986	Latest APR (2023-2024): 985

T28 Ball State Cardinals	

Last Year's APR Ranking: T45 APR (2022-2023) 979	Latest APR (2023-2024): 985

T30 Louisville Cardinals	

Last Year's APR Ranking: T17 APR (2022-2023) 987	Latest APR (2023-2024): 984

T30 Utah Utes	

Last Year's APR Ranking: T26 APR (2022-2023) 984	Latest APR (2023-2024): 984

T30 James Madison Dukes	

Last Year's APR Ranking: T38 APR (2022-2023) 981	Latest APR (2023-2024): 984

T33 Virginia Cavaliers	

Last Year's APR Ranking: T22 APR (2022-2023) 985	Latest APR (2023-2024): 983

T33 East Carolina Pirates	

Last Year's APR Ranking: T43 APR (2022-2023) 980	Latest APR (2023-2024): 983

T33 Arkansas Razorbacks	

Last Year's APR Ranking: T45 APR (2022-2023) 979	Latest APR (2023-2024): 983

T36 Coastal Carolina Chanticleers	

Last Year's APR Ranking: T28 APR (2022-2023) 983	Latest APR (2023-2024): 982

T36 Indiana Hoosiers	

Last Year's APR Ranking: T28 APR (2022-2023) 983	Latest APR (2023-2024): 982

T36 Florida Gators	

Last Year's APR Ranking: T38 APR (2022-2023) 981	Latest APR (2023-2024): 982

T36 Iowa Hawkeyes	

Last Year's APR Ranking: T58 APR (2022-2023) 974	Latest APR (2023-2024): 982

T40 Liberty Flames	

Last Year's APR Ranking: T43 APR (2022-2023) 980	Latest APR (2023-2024): 981

T40 Texas Tech Red Raiders	

Last Year's APR Ranking: T62 APR (2022-2023) 973	Latest APR (2023-2024): 981

T42 Ole Miss Rebels	

Last Year's APR Ranking: T17 APR (2022-2023) 987	Latest APR (2023-2024): 980

T42 Army Black Knights	

Last Year's APR Ranking: T38 APR (2022-2023) 981	Latest APR (2023-2024): 980

T42 West Virginia Mountaineers	

Last Year's APR Ranking: T38 APR (2022-2023) 981	Latest APR (2023-2024): 980

T45 Mississippi State Bulldogs	

Last Year's APR Ranking: T26 APR (2022-2023) 984	Latest APR (2023-2024): 979

T45 Nevada Wolf Pack	

Last Year's APR Ranking: T48 APR (2022-2023) 978	Latest APR (2023-2024): 979

T45 UNLV Rebels	

Last Year's APR Ranking: T48 APR (2022-2023) 978	Latest APR (2023-2024): 979

T45 WKU Hilltoppers	

Last Year's APR Ranking: T48 APR (2022-2023) 978	Latest APR (2023-2024): 979

T45 Vanderbilt Commodores	

Last Year's APR Ranking: T56 APR (2022-2023) 976	Latest APR (2023-2024): 979

T45 Old Dominion Monarchs	

Last Year's APR Ranking: T66 APR (2022-2023) 972	Latest APR (2023-2024): 979

T45 Kentucky Wildcats	

Last Year's APR Ranking: 69 APR (2022-2023) 971	Latest APR (2023-2024): 979

T45 Georgia Bulldogs	

Last Year's APR Ranking: T74 APR (2022-2023) 968	Latest APR (2023-2024): 979

T53 Washington Huskies	

Last Year's APR Ranking: T32 APR (2022-2023) 982	Latest APR (2023-2024): 978

T53 Rutgers Scarlet Knights	

Last Year's APR Ranking: T66 APR (2022-2023) 972	Latest APR (2023-2024): 978

55 Eastern Michigan Eagles	

Last Year's APR Ranking: T74 APR (2022-2023) 968	Latest APR (2023-2024): 977

T56 USC Trojans	

Last Year's APR Ranking: T56 APR (2022-2023) 976	Latest APR (2023-2024): 976

T56 Wyoming Cowboys	

Last Year's APR Ranking: T56 APR (2022-2023) 976	Latest APR (2023-2024): 976

T56 Nebraska Cornhuskers	

Last Year's APR Ranking: T66 APR (2022-2023) 972	Latest APR (2023-2024): 976

T56 Virginia Tech Hokies	

Last Year's APR Ranking: T72 APR (2022-2023) 969	Latest APR (2023-2024): 976

T60 South Carolina Gamecocks	

Last Year's APR Ranking: T38 APR (2022-2023) 981	Latest APR (2023-2024): 975

T60 Fresno State Bulldogs	

Last Year's APR Ranking: T66 APR (2022-2023) 972	Latest APR (2023-2024): 975

T60 Oklahoma Sooners	

Last Year's APR Ranking: T86 APR (2022-2023) 965	Latest APR (2023-2024): 975

T63 Pitt Panthers	

Last Year's APR Ranking: T28 APR (2022-2023) 983	Latest APR (2023-2024): 974

T63 Baylor Bears	

Last Year's APR Ranking: T48 APR (2022-2023) 978	Latest APR (2023-2024): 974

T65 Arizona State Sun Devils	

Last Year's APR Ranking: T62 APR (2022-2023) 973	Latest APR (2023-2024): 973

T65 Toledo Rockets	

Last Year's APR Ranking: 71 APR (2022-2023) 970	Latest APR (2023-2024): 973

T67 Purdue Boilermakers	

Last Year's APR Ranking: T56 APR (2022-2023) 976	Latest APR (2023-2024): 972

T67 Kansas Jayhawks	

Last Year's APR Ranking: T74 APR (2022-2023) 968	Latest APR (2023-2024): 972

T67 Troy Troans	

Last Year's APR Ranking: T86 APR (2022-2023) 965	Latest APR (2023-2024): 972

T70 Cal Golden Bears	

Last Year's APR Ranking: T56 APR (2022-2023) 976	Latest APR (2023-2024): 971

T70 Illinois Fighting Illini	

Last Year's APR Ranking: T79 APR (2022-2023) 967	Latest APR (2023-2024): 971

T70 Sam Houston Bearkats	

Last Year's APR Ranking: T101 APR (2022-2023) 955	Latest APR (2023-2024): 971

73 Delaware Blue Hens	

Last Year's APR Ranking: T58 APR (2022-2023) 974	Latest APR (2023-2024): 970

T74 Georgia State Panthers	

Last Year's APR Ranking: T56 APR (2022-2023) 976	Latest APR (2023-2024): 969

T74 Bowling Green Falcons	

Last Year's APR Ranking: T66 APR (2022-2023) 972	Latest APR (2023-2024): 969

T74 Temple Owls	

Last Year's APR Ranking: 70 APR (2022-2023) 971	Latest APR (2023-2024): 969

T74 Georgia Tech Yellow Jackets	

Last Year's APR Ranking: T72 APR (2022-2023) 969	Latest APR (2023-2024): 969

T74 Arizona Wildcats	

Last Year's APR Ranking: T81 APR (2022-2023) 966	Latest APR (2023-2024): 969

T79 Michigan State Spartans	

Last Year's APR Ranking: T58 APR (2022-2023) 974	Latest APR (2023-2024): 968

T79 App State Mountaineers	

Last Year's APR Ranking: T81 APR (2022-2023) 966	Latest APR (2023-2024): 968

81 UCLA Bruins	

Last Year's APR Ranking: T66 APR (2022-2023) 972	Latest APR (2023-2024): 967

82 San Diego State Aztecs	

Last Year's APR Ranking: T81 APR (2022-2023) 966	Latest APR (2023-2024): 966

T83 Oregon State Beavers	

Last Year's APR Ranking: T56 APR (2022-2023) 976	Latest APR (2023-2024): 965

T83 Northern Illinois Huskies	

Last Year's APR Ranking: T88 APR (2022-2023) 964	Latest APR (2023-2024): 965

T85 Navy Midshipmen	

Last Year's APR Ranking: T88 APR (2022-2023) 964	Latest APR (2023-2024): 964

T85 Washington State Cougars	

Last Year's APR Ranking: T91 APR (2022-2023) 960	Latest APR (2023-2024): 964

T85 South Alabama Jaguars	

Last Year's APR Ranking: T94 APR (2022-2023) 958	Latest APR (2023-2024): 964

T85 Tennessee Volunteers	

Last Year's APR Ranking: T119 APR (2022-2023) 945	Latest APR (2023-2024): 964

89 TCU Horned Frogs	

Last Year's APR Ranking: T81 APR (2022-2023) 966	Latest APR (2023-2024): 963

T90 UTSA Roadrunners	

Last Year's APR Ranking: T119 APR (2022-2023) 945	Latest APR (2023-2024): 962

T90 Maryland Terrapins	

Last Year's APR Ranking: T122 APR (2022-2023) 942	Latest APR (2023-2024): 962

T92 Marshall Thundering Herd	

Last Year's APR Ranking: T81 APR (2022-2023) 966	Latest APR (2023-2024): 961

T92 Colorado Buffaloes	

Last Year's APR Ranking: T91 APR (2022-2023) 960	Latest APR (2023-2024): 961

T92 USF Bulls	

Last Year's APR Ranking: 93 APR (2022-2023) 959	Latest APR (2023-2024): 961

T95 SMU Mustangs	

Last Year's APR Ranking: T74 APR (2022-2023) 968	Latest APR (2023-2024): 960

T95 Texas State Bobcats	

Last Year's APR Ranking: T111 APR (2022-2023) 950	Latest APR (2023-2024): 960

T97 Middle Tennessee Blue Raiders	

Last Year's APR Ranking: T74 APR (2022-2023) 968	Latest APR (2023-2024): 959

T97 Miami University RedHawks	

Last Year's APR Ranking: T79 APR (2022-2023) 967	Latest APR (2023-2024): 959

T99 Colorado State Rams	

Last Year's APR Ranking: 90 APR (2022-2023) 963	Latest APR (2023-2024): 958

T99 Syracuse Orange	

Last Year's APR Ranking: T94 APR (2022-2023) 958	Latest APR (2023-2024): 958

T99 Memphis Tigers	

Last Year's APR Ranking: 98 APR (2022-2023) 957	Latest APR (2023-2024): 958

T99 Georgia Southern Eagles	

Last Year's APR Ranking: 115 APR (2022-2023) 949	Latest APR (2023-2024): 958

103 Ohio Bobcats	

Last Year's APR Ranking: T94 APR (2022-2023) 958	Latest APR (2023-2024): 957

104 Texas A&M Aggies	

Last Year's APR Ranking: T108 APR (2022-2023) 951	Latest APR (2023-2024): 956

T105 Kennesaw State Owls	

Last Year's APR Ranking: T99 APR (2022-2023) 956	Latest APR (2023-2024): 955

T105 FIU Panthers	

Last Year's APR Ranking: T105 APR (2022-2023) 952	Latest APR (2023-2024): 955

T107 BYU Cougars	

Last Year's APR Ranking: T108 APR (2022-2023) 951	Latest APR (2023-2024): 954

T107 New Mexico State Aggies	

Last Year's APR Ranking: T130 APR (2022-2023) 935	Latest APR (2023-2024): 954

109 Louisiana Ragin' Cajuns	

Last Year's APR Ranking: T101 APR (2022-2023) 955	Latest APR (2023-2024): 953

110 North Texas Mean Green	

Last Year's APR Ranking: T103 APR (2022-2023) 954	Latest APR (2023-2024): 953

T111 UTEP Miners	

Last Year's APR Ranking: 118 APR (2022-2023) 946	Latest APR (2023-2024): 952

T111 LSU Tigers	

Last Year's APR Ranking: T132 APR (2022-2023) 934	Latest APR (2023-2024): 952

113 New Mexico Lobos	

Last Year's APR Ranking: T116 APR (2022-2023) 947	Latest APR (2023-2024): 951

T114 San Jose State Spartans	

Last Year's APR Ranking: T94 APR (2022-2023) 958	Latest APR (2023-2024): 950

T114 Kent State Golden Flashes	

Last Year's APR Ranking: T111 APR (2022-2023) 950	Latest APR (2023-2024): 950

T116 Arkansas State Red Wolves	

Last Year's APR Ranking: T99 APR (2022-2023) 956	Latest APR (2023-2024): 948

T116 UConn Huskies	

Last Year's APR Ranking: T103 APR (2022-2023) 954	Latest APR (2023-2024): 948

T116 Western Michigan Broncos	

Last Year's APR Ranking: T108 APR (2022-2023) 951	Latest APR (2023-2024): 948

T119 Hawaii Rainbow Warriors	

Last Year's APR Ranking: T105 APR (2022-2023) 952	Latest APR (2023-2024): 947

T119 Penn State Nittany Lions	

Last Year's APR Ranking: T116 APR (2022-2023) 947	Latest APR (2023-2024): 947

T119 Florida Atlantic Owls	

Last Year's APR Ranking: T128 APR (2022-2023) 936	Latest APR (2023-2024): 947

122 Oregon Ducks	

Last Year's APR Ranking: T124 APR (2022-2023) 941	Latest APR (2023-2024): 946

T123 UMass Minutemen	

Last Year's APR Ranking: T105 APR (2022-2023) 952	Latest APR (2023-2024): 944

T123 UAB Blazers	

Last Year's APR Ranking: 126 APR (2022-2023) 939	Latest APR (2023-2024): 944

125 Central Michigan Chippewas	

Last Year's APR Ranking: T119 APR (2022-2023) 945	Latest APR (2023-2024): 943

126 Tulsa Golden Hurricane	

Last Year's APR Ranking: T128 APR (2022-2023) 936	Latest APR (2023-2024): 942

127 Houston Cougars	

Last Year's APR Ranking: T122 APR (2022-2023) 942	Latest APR (2023-2024): 940

128 Utah State Aggies	

Last Year's APR Ranking: T111 APR (2022-2023) 950	Latest APR (2023-2024): 938

129 Southern Miss Golden Eagles	

Last Year's APR Ranking: 134 APR (2022-2023) 932	Latest APR (2023-2024): 937

130 Buffalo Bulls	

Last Year's APR Ranking: T111 APR (2022-2023) 950	Latest APR (2023-2024): 936

131 Jacksonville State Gamecocks	

Last Year's APR Ranking: T132 APR (2022-2023) 934	Latest APR (2023-2024): 934

132 ULM Warhawks	

Last Year's APR Ranking: T130 APR (2022-2023) 935	Latest APR (2023-2024): 932

133 Louisiana Tech Bulldogs	

Last Year's APR Ranking: 127 APR (2022-2023) 938	Latest APR (2023-2024): 931

134 Charlotte 49ers	

Last Year's APR Ranking: T124 APR (2022-2023) 941	Latest APR (2023-2024): 930

135 Missouri State Bears	

Last Year's APR Ranking: 136 APR (2022-2023) 912	Latest APR (2023-2024): 924

136 Akron Zips	

Last Year's APR Ranking: 135 APR (2022-2023) 925	Latest APR (2023-2024): 914"""

if __name__ == '__main__':
    print("Loading team mappings from CSV...")
    team_mappings, team_variations = load_team_mappings()
    print(f"Loaded {len(team_mappings)} team mappings\n")
    
    print("Parsing APR data...")
    apr_data = parse_apr_text(pasted_data)
    print(f"Found {len(apr_data)} APR entries\n")
    
    if apr_data:
        print("Sample entries found:")
        for i, (team, score) in enumerate(list(apr_data.items())[:10]):
            print(f"  {team}: {score}")
        print()
    
    print("Matching to team names...")
    matched, unmatched = match_apr_to_teams(apr_data, team_mappings, team_variations)
    print(f"Matched {len(matched)} teams")
    
    if unmatched:
        print(f"\n⚠ {len(unmatched)} teams could not be automatically matched:")
        for team, score in unmatched[:20]:
            print(f"  {team}: {score}")
        if len(unmatched) > 20:
            print(f"  ... and {len(unmatched) - 20} more")
    
    # Generate apr_data.py
    print("\nGenerating apr_data.py...")
    with open('apr_data.py', 'w') as f:
        f.write('# APR Rankings for 5-7 teams\n')
        f.write('# Format: {team_name: apr_score}\n')
        f.write('# Higher APR scores are better\n')
        f.write('# Data sourced from collegefootballnews.com (2023-2024 APR)\n\n')
        f.write('APR_RANKINGS = {\n')
        
        # Sort by APR score (descending)
        sorted_apr = sorted(matched.items(), key=lambda x: x[1], reverse=True)
        for team_name, apr_score in sorted_apr:
            f.write(f"    '{team_name}': {apr_score},\n")
        
        f.write('}\n')
    
    print(f"\n✓ Successfully created apr_data.py with {len(matched)} teams")
    
    if unmatched:
        print(f"\nNote: {len(unmatched)} teams need manual mapping.")
        print("You can manually add them to apr_data.py using the team names from cfb_mastersheet.csv")

