import json

import websockets

from celilo.actions import ACTION_REALM_CONNECT
from celilo.network_config import HOST, PORT
from celilo.test_suite import pixel

device = pixel

request = {
    "action": ACTION_REALM_CONNECT,
    "data": device,
    "sender": device
}

def format_data_array(json_map):
    data = []
    for key in json_map:
        data.append(json_map[key]["model"])
    if len(data) == 0:
        return None
    return json.dumps(data)


def get_data(message):
    return json.loads(json.loads(message))["data"]


class ws_client:
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.websocket = None

    async def connect(self, tartget_request):
        async with websockets.connect(f"ws://{HOST}:{PORT}") as websocket:

            j = json.dumps(request)
            await websocket.send(j)
            message = await websocket.recv()
            android_device_map = json.loads(message)
            android_devices = format_data_array(android_device_map)

            if not android_devices:
                print("No connected android devices found")
                return

            print(f">>> {android_devices}")
            data = json.loads(android_devices)

            for device in data:
                print(f"device {device}")
                request["data"] = device
                await websocket.send(json.dumps(tartget_request))
                message = await websocket.recv()
                print(f"message {json.loads(message)}")






    async def send(self, data):
        await self.websocket.send(data)

    async def recv(self):
        return await self.websocket.recv()

    async def close(self):
        await self.websocket.close()
