import os, base64, datetime, requests, json
from dotenv import load_dotenv
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.backends import default_backend

load_dotenv()
KEY_ID   = os.getenv("KALSHI_API_KEY_ID")
KEY_PATH = os.getenv("KALSHI_PRIVATE_KEY_PATH")
BASE_URL = "https://api.elections.kalshi.com"

def load_private_key(f):
    with open(f, "rb") as k: return serialization.load_pem_private_key(k.read(), password=None, backend=default_backend())

def sign_request(pk, ts, method, path):
    msg = (ts + method + path).encode("utf-8")
    sig = pk.sign(msg, padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.DIGEST_LENGTH), hashes.SHA256())
    return base64.b64encode(sig).decode("utf-8")

def get_headers(method, path):
    ts = str(int(datetime.datetime.now().timestamp() * 1000))
    pk = load_private_key(KEY_PATH)
    return {"KALSHI-ACCESS-KEY": KEY_ID, "KALSHI-ACCESS-TIMESTAMP": ts, "KALSHI-ACCESS-SIGNATURE": sign_request(pk, ts, method, path), "Content-Type": "application/json"}

# Fetch KXBTC15M markets
path = "/trade-api/v2/markets"
params = "?status=open&limit=100&series_ticker=KXBTC15M"
r = requests.get(BASE_URL + path + params, headers=get_headers("GET", path))
markets = r.json().get("markets", [])

print(f"KXBTC15M markets found: {len(markets)}")
for m in markets:
    print("\n--- MARKET ---")
    for k, v in m.items():
        print(f"  {k}: {v}")

with open("C:\\kalshibot\\btc15m_market.json", "w") as f:
    json.dump(markets, f, indent=2)
print("\nSaved to btc15m_market.json")
