import websocket
import datetime
import threading
import requests
import vlc  # 使用 VLC 播放音频
import time
import json
import queue

# 配置项
config = {
    "enable_auto_get": True,  # 设置是否启用主动获取播放项
     "url" : "127.0.0.1" #服务端Url
}

audio_queue = queue.Queue()
player = None

def on_message(ws, message):
    timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
    print(f"[{timestamp}] Received message: {message}")

    try:
        # 解析收到的 JSON 数据
        data = json.loads(message)
        if "Data" in data and "HttpValue" in data["Data"]:
            audio_url = data["Data"]["HttpValue"]
            audio_queue.put(audio_url)
            process_audio_queue()
    except json.JSONDecodeError as e:
        print(f"[Error] Failed to parse message as JSON: {e}")

def process_audio_queue():
    global player
    if not player or player.get_state() == vlc.State.Ended:
        if not audio_queue.empty():
            audio_url = audio_queue.get()
            play_audio(audio_url)
         

def play_audio(url):
    global player
    # 使用 VLC 播放音频
    player = vlc.MediaPlayer(url)
    player.play()

    # 启动线程等待音频播放结束
    threading.Thread(target=wait_for_audio_end).start()

def wait_for_audio_end():
    global player
    # 等待音频播放结束
    while True:
        state = player.get_state()
        if state == vlc.State.Ended:
            break
        time.sleep(0.01)
    # 播放结束后处理队列
    process_audio_queue()

def on_error(ws, error):
    print(f"[Error] {error}")

def on_close(ws, close_status_code, close_msg):
    print("### Connection closed ###")

def on_open(ws):
    print("### Connection opened ###")

if __name__ == "__main__":
    # 启用 WebSocket 调试信息(可选)
    # websocket.enableTrace(True)

    # 替换为您的 WebSocket 服务器地址
    ws_url = f"ws://{config['url']}:10002"

    ws = websocket.WebSocketApp(ws_url,
                                on_open=on_open,
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close)

    # 运行 WebSocket 客户端
    wst = threading.Thread(target=ws.run_forever)
    wst.daemon = True
    wst.start()

    try:
        while True:
            pass  # 保持主线程运行
    except KeyboardInterrupt:
        ws.close()
        print("Exited")