import json
from datetime import datetime, timezone

def parse_time(val):
    if isinstance(val, (int, float)):
        return float(val)
    if isinstance(val, str):
        if 'T' in val:
            return datetime.strptime(val, "%Y-%m-%dT%H:%M:%SZ").replace(tzinfo=timezone.utc).timestamp()
        return float(val)
    return float(val)

def load_json(filepath):
    with open(filepath, 'r') as f:
        data = json.load(f)
        if isinstance(data, dict):
            if 't' in data and 'o' in data:
                bars = []
                for i in range(len(data['t'])):
                    bars.append({
                        'time': parse_time(data['t'][i]),
                        'open': float(data['o'][i]),
                        'high': float(data['h'][i]),
                        'low': float(data['l'][i]),
                        'close': float(data['c'][i]),
                    })
                return bars
            for k, v in data.items():
                if isinstance(v, list) and len(v) > 0 and isinstance(v[0], dict) and 'time' in v[0]:
                    return v
        return data

def get_bars_around(data, timestamp_str, hours_before=24, hours_after=12):
    target_dt = datetime.strptime(timestamp_str, "%Y-%m-%dT%H:%M:%SZ").replace(tzinfo=timezone.utc)
    target_ts = target_dt.timestamp()
    
    start_ts = target_ts - (hours_before * 3600)
    end_ts = target_ts + (hours_after * 3600)
    
    bars = []
    for bar in data:
        t = parse_time(bar['time'])
        if start_ts <= t <= end_ts:
            bar_copy = bar.copy()
            bar_copy['time'] = t
            bars.append(bar_copy)
    return bars

def format_bars(bars):
    res = []
    for b in bars:
        t = parse_time(b['time'])
        dt = datetime.fromtimestamp(t, tz=timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')
        res.append(f"{dt} O:{b['open']} H:{b['high']} L:{b['low']} C:{b['close']}")
    return res

h1_data = load_json('hybrid/data/ohlcv_H1.json')
m30_data = load_json('hybrid/data/ohlcv_M30.json')
m15_data = load_json('hybrid/data/ohlcv_M15.json')
m5_data = load_json('hybrid/data/ohlcv_M5.json')

c1 = "2026-06-30T07:45:00Z"
c2 = "2026-06-30T08:30:00Z"
c3 = "2026-06-30T11:15:00Z"

print("=== HTF H1 Context (June 28-30) ===")
h1_bars = get_bars_around(h1_data, c2, hours_before=48, hours_after=12)
for b in h1_bars: print(datetime.fromtimestamp(b['time'], tz=timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'), b)

print("\n=== M30 Context ===")
m30_bars = get_bars_around(m30_data, c2, hours_before=24, hours_after=6)
for b in m30_bars: print(datetime.fromtimestamp(b['time'], tz=timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'), b)

print("\n=== C1: 07:45 Long - M15 ===")
for b in format_bars(get_bars_around(m15_data, c1, hours_before=4, hours_after=2)): print(b)
print("\n=== C1: 07:45 Long - M5 ===")
for b in format_bars(get_bars_around(m5_data, c1, hours_before=2, hours_after=2)): print(b)

print("\n=== C2: 08:30 Short - M15 ===")
for b in format_bars(get_bars_around(m15_data, c2, hours_before=4, hours_after=4)): print(b)
print("\n=== C2: 08:30 Short - M5 ===")
for b in format_bars(get_bars_around(m5_data, c2, hours_before=2, hours_after=4)): print(b)

print("\n=== C3: 11:15 Short - M15 ===")
for b in format_bars(get_bars_around(m15_data, c3, hours_before=4, hours_after=4)): print(b)
print("\n=== C3: 11:15 Short - M5 ===")
for b in format_bars(get_bars_around(m5_data, c3, hours_before=2, hours_after=4)): print(b)
