import os, base64, datetime, requests
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
import json

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(file_path):
    with open(file_path, "rb") as f:
        return serialization.load_pem_private_key(f.read(), password=None, backend=default_backend())

def sign_request(private_key, timestamp, method, path):
    message = (timestamp + method + path).encode("utf-8")
    signature = private_key.sign(message, padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.DIGEST_LENGTH), hashes.SHA256())
    return base64.b64encode(signature).decode("utf-8")

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

# Test every possible short-interval BTC series
candidates = [
    "KXBTC5M", "KXBTC5MIN", "KXBTCMIN", "KXBTC15M", "KXBTC15MIN",
    "KXBTCHOURLY", "KXBTCH", "KXBTC1H", "KXBTCFAST", "KXBTCQUICK",
    "KXBTCUP", "KXBTCUPDOWN", "KXBTCPUMP", "KXBTCMOVE",
    "KXBTCSHORT", "KXBTCINTRA", "KXBTCLIVE"
]

results = {}
for ticker in candidates:
    path = "/trade-api/v2/markets"
    params = f"?status=open&limit=10&series_ticker={ticker}"
    headers = get_headers("GET", path)
    r = requests.get(BASE_URL + path + params, headers=headers)
    if r.status_code == 200:
        markets = r.json().get("markets", [])
        if markets:
            results[ticker] = len(markets)
            print(f"FOUND: {ticker} — {len(markets)} markets")
            for m in markets[:3]:
                print(f"  {m.get('ticker')} | expires: {m.get('expected_expiration_time') or m.get('close_time')}")
        else:
            print(f"empty: {ticker}")

with open("C:\\kalshibot\\btc_series_check.json", "w") as f:
    json.dump(results, f, indent=2)

print(f"\nSeries with markets: {list(results.keys())}")
