import json

def load_data(file_name):
    path = f"/home/aryy/.hermes/profiles/finance/backtests/xauusd_2026/hybrid/data/{file_name}"
    with open(path, "r") as f:
        data = json.load(f)
        if isinstance(data, dict):
            # Try to find the actual list inside the dict
            for k, v in data.items():
                if isinstance(v, list):
                    return v
        return data

def get_m5_bars(data, target_ts, num_before=6, num_after=4):
    # Print the first few items to see what we're dealing with
    print(f"Data type: {type(data)}, first item type: {type(data[0]) if len(data) > 0 else 'N/A'}")
    
    for i, bar in enumerate(data):
        if isinstance(bar, dict):
            # Check which time field exists
            time_val = bar.get('timestamp', bar.get('time', ''))
            if str(time_val).startswith(target_ts[:16]):
                start = max(0, i - num_before)
                end = min(len(data), i + num_after + 1)
                return data[start:end]
        elif isinstance(bar, list) and len(bar) > 0:
            time_val = str(bar[0])
            if time_val.startswith(target_ts[:16]):
                start = max(0, i - num_before)
                end = min(len(data), i + num_after + 1)
                return data[start:end]
                
    # Closest
    for i in range(len(data)-1, -1, -1):
        time_val = ""
        if isinstance(data[i], dict):
            time_val = str(data[i].get('timestamp', data[i].get('time', '')))
        elif isinstance(data[i], list) and len(data[i]) > 0:
            time_val = str(data[i][0])
            
        if time_val and time_val <= target_ts:
            start = max(0, i - num_before)
            end = min(len(data), i + num_after + 1)
            return data[start:end]
    return []

m5_data = load_data('ohlcv_M5.json')

timestamps = [
    "2026-07-07T09:15:00Z",
    "2026-07-07T22:30:00Z",
    "2026-07-07T23:45:00Z"
]

for ts in timestamps:
    print(f"\nM5 Context for {ts}:")
    bars = get_m5_bars(m5_data, ts, 6, 4)
    for b in bars: print(b)
