#!/usr/bin/env python3

import pandas as pd
import requests

def get_open_events():

    BASE_URL = "https://api.elections.kalshi.com/trade-api/v2"

    all_events = []
    cursor = None
    round = 0

    while True:
        params = {
            'limit': 200,
            'with_nested_markets': 'true'
        }
        if cursor:
            params['cursor'] = cursor

        response = requests.get(f"{BASE_URL}/events", params=params)
        data = response.json()

        events = data.get('events', [])
        all_events.extend(events)

        cursor = data.get('cursor')
        if not cursor:
            break

        round += 1
        print(f'Downloading round {round}')

    print(f"Events fetched: {len(all_events)}")

    # Flatten to markets with categories
    all_markets = []
    for event in all_events:
        category = event.get('category')
        event_title = event.get('title')

        for market in event.get('markets', []):
            market['category'] = category
            market['event_title'] = event_title
            all_markets.append(market)

    df_ = pd.DataFrame(all_markets)
    print(f"Total markets: {len(df_)}")

    for one_column in ['open_time', 'close_time']:
        print(f'Processing datetime for {one_column}...', end='')
        df_[one_column] = pd.to_datetime(df_[one_column], format='ISO8601', utc=True).dt.as_unit('s')
        print('Done.')

    return df_

df = get_open_events()
