import asyncio
import json
import websockets
import random
import os
import hands
import time

avg_fps = 0
nb_fps = 0

class WebsocketServer:
    def __init__(self,getEffects,port=os.getenv("PORT"),host=os.getenv("HOST")) -> None:
        self.host = host
        self.port = port
        self.getEffects = getEffects
    
    async def run(self):
        async with websockets.serve(self.handler, self.host, self.port):
            await asyncio.Future()


    async def handler(self,websocket):
        while True:
            start = time.time()
            messages = self.getEffects()
            hands.frame()
            await websocket.send(json.dumps(messages))
            delay = time.time() - start
            avg_fps += 1/delay
            nb_fps += 1
            print("FPS: ", avg_fps/nb_fps)
            # await asyncio.sleep(1/30)

#Remplacer ça par la fonction qui récupère les effets (dans le module de reconnaissance de gestes)
def getEffects():
    return {"type": "effects", "effects": [{"type": "thumbs_up", "x":random.randint(0,100), "y": random.randint(0,100), "width": 50, "height": 50}]}

server = WebsocketServer(getEffects)
asyncio.run(server.run())