File size: 2,093 Bytes
80e55f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72


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