import pandas as pd import re import logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) eco_data = None def load_eco_data(): global eco_data try: eco_data = pd.read_csv('data/Chess Opening Reference - Sheet1.csv') logger.info(f"Loaded {len(eco_data)} ECO codes") return True except Exception as e: logger.error(f"Error loading ECO data: {str(e)}") return False def extract_eco_from_pgn(pgn): eco_match = re.search(r'\[ECO "([A-E][0-9]{2})"\]', pgn) return eco_match.group(1) if eco_match else None def get_opening_name(eco_code): if eco_data is not None and eco_code: match = eco_data[eco_data['ECO Code'] == eco_code] if not match.empty: return match.iloc[0]['Name'] return "Unknown Opening" def analyze_opponent_openings(pgn_list, target_username): target_username = target_username.lower() opponent_openings = [] for pgn in pgn_list: white_match = re.search(r'\[White "([^"]+)"\]', pgn) black_match = re.search(r'\[Black "([^"]+)"\]', pgn) if not white_match or not black_match: continue white_player = white_match.group(1).lower() black_player = black_match.group(1).lower() is_white = target_username in white_player is_black = target_username in black_player if not is_white and not is_black: continue eco_code = extract_eco_from_pgn(pgn) if eco_code: opening_name = get_opening_name(eco_code) if is_white: opponent_color = "qora" else: opponent_color = "oq" opponent_openings.append({ 'eco': eco_code, 'name': opening_name, 'opponent_color': opponent_color, 'user_color': 'oq' if is_white else 'qora' }) return opponent_openings