import asyncio
import json
import time
import hmac
import base64
import hashlib
import websockets

# OKX API Key 資訊
# API_KEY = "0a943a02-e16f-474d-b6b4-431c4b865639"
# SECRET_KEY = "45ACC4249524C4D5AED30DB4EE75CBDD"

API_KEY = "4a4d18ed-f671-4a26-92cb-c34388407d41"
SECRET_KEY = "A209BB83BEBC32727E3E807E43310554"
PASSPHRASE = "@89687828cC"

# 生成 OKX WebSocket 認證簽名
def generate_signature(timestamp, method="GET", request_path="/users/self/verify"):
    message = f"{timestamp}{method}{request_path}"
    mac = hmac.new(SECRET_KEY.encode(), message.encode(), hashlib.sha256)
    return base64.b64encode(mac.digest()).decode()

# 建立 WebSocket 連線
async def connect_okx():
    url = "wss://ws.okx.com:8443/ws/v5/private"
    
    async with websockets.connect(url) as ws:
        print("✅ 連線成功，開始認證...")

        # 取得時間戳
        timestamp = str(int(time.time()))

        # 準備認證訊息
        auth_msg = {
            "op": "login",
            "args": [
                {
                    "apiKey": API_KEY,
                    "passphrase": PASSPHRASE,
                    "timestamp": timestamp,
                    "sign": generate_signature(timestamp)
                }
            ]
        }

        # 發送認證請求
        await ws.send(json.dumps(auth_msg))
        response = await ws.recv()
        print("🔑 認證結果:", response)

        # 訂閱持倉資訊
        subscribe_msg = {
            "op": "subscribe",
            "args": [
                {
                    "channel": "positions",
                    "instType": "SWAP"  # 可選值: MARGIN, SWAP, FUTURES, OPTION
                }
            ]
        }

        await ws.send(json.dumps(subscribe_msg))
        print("📡 已訂閱持倉資訊")

        # 持續接收數據
        while True:
            data = await ws.recv()
            print("📊 持倉數據:", data)

# 啟動 WebSocket 連線
asyncio.run(connect_okx())
