#!/usr/bin/env python3
"""Economic Calendar Fetcher — pulls upcoming high-impact events from FRED and public APIs."""

import urllib.request
import json
import sys
from datetime import datetime, timedelta

def fetch_trading_economics():
    """Fetch economic calendar from TradingEconomics (public endpoint)."""
    today = datetime.now().strftime("%Y-%m-%d")
    tomorrow = (datetime.now() + timedelta(days=1)).strftime("%Y-%m-%d")
    
    url = f"https://tradingeconomics.com/calendar?f=json&country=united%20states&importance=3"
    req = urllib.request.Request(url, headers={
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
        "Accept": "application/json"
    })
    
    try:
        with urllib.request.urlopen(req, timeout=10) as r:
            data = json.loads(r.read())
            return data
    except Exception as e:
        return {"error": str(e)}

def fetch_fred_releases():
    """Fetch upcoming FRED data releases."""
    today = datetime.now().strftime("%Y-%m-%d")
    week_ahead = (datetime.now() + timedelta(days=7)).strftime("%Y-%m-%d")
    
    # FRED releases endpoint (no API key needed for this)
    url = f"https://api.stlouisfed.org/fred/releases/dates?realtime_start={today}&realtime_end={week_ahead}&file_type=json&include_release_dates_with_no_data=true"
    req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
    
    try:
        with urllib.request.urlopen(req, timeout=10) as r:
            data = json.loads(r.read())
            return data
    except Exception as e:
        return {"error": str(e)}

def get_market_moving_events():
    """Get known high-impact events for the week."""
    # Hardcoded major recurring events and their typical schedule
    major_events = {
        "Monday": ["ISM Manufacturing (1st Mon)", "Factory Orders"],
        "Tuesday": ["JOLTS Job Openings", "Consumer Confidence"],
        "Wednesday": ["ADP Employment", "FOMC Minutes (when scheduled)", "EIA Petroleum Status"],
        "Thursday": ["Initial Jobless Claims (8:30 AM ET)", "ISM Services (1st Thu)"],
        "Friday": ["Non-Farm Payrolls (1st Fri, 8:30 AM ET)", "Consumer Sentiment (Prelim)"]
    }
    
    today = datetime.now().strftime("%A")
    return {
        "today": today,
        "typical_events": major_events.get(today, ["No major recurring events"]),
        "note": "Check investing.com/economic-calendar for real-time updates"
    }

def get_intermarket_snapshot():
    """Fetch key intermarket data for correlation analysis."""
    symbols = {
        "S&P 500": "^GSPC",
        "Nasdaq": "^IXIC",
        "Dow": "^DJI",
        "VIX": "^VIX",
        "DXY (Dollar)": "DX-Y.NYB",
        "10Y Treasury": "^TNX",
        "2Y Treasury": "^IRX",
        "Oil (WTI)": "CL=F",
        "Gold": "GC=F",
        "Bitcoin": "BTC-USD",
        "EUR/USD": "EURUSD=X",
        "USD/JPY": "JPY=X",
    }
    
    results = {}
    for name, sym in symbols.items():
        try:
            url = f"https://query1.finance.yahoo.com/v8/finance/chart/{sym}?interval=1d&range=5d"
            req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
            with urllib.request.urlopen(req, timeout=8) as r:
                data = json.loads(r.read())
                meta = data["chart"]["result"][0]["meta"]
                price = meta["regularMarketPrice"]
                prev = meta.get("chartPreviousClose", meta.get("previousClose", 0))
                chg_pct = ((price - prev) / prev * 100) if prev else 0
                results[name] = {"price": price, "change_pct": round(chg_pct, 2)}
        except:
            results[name] = {"error": "failed"}
    
    return results

if __name__ == "__main__":
    if len(sys.argv) > 1 and sys.argv[1] == "intermarket":
        data = get_intermarket_snapshot()
        print(json.dumps(data, indent=2))
    elif len(sys.argv) > 1 and sys.argv[1] == "events":
        data = get_market_moving_events()
        print(json.dumps(data, indent=2))
    else:
        print("Usage: python3 econ_calendar.py [intermarket|events]")
        print("\n--- Today's Events ---")
        events = get_market_moving_events()
        print(json.dumps(events, indent=2))
        print("\n--- Intermarket Snapshot ---")
        data = get_intermarket_snapshot()
        for name, info in data.items():
            if "error" in info:
                print(f"  {name}: ERROR")
            else:
                print(f"  {name}: {info['price']:,.2f} ({info['change_pct']:+.2f}%)")
