import uuid
from enum import Enum

from celilo.actions import ACTION_SEND_MESSAGE


## class for sending adb commands
def generate_UUID():
    return str(uuid.uuid4())


S20 = '7d6f70885c7360cc'
S20_1 = 'd9f3ec9e118d63f1'
S20_2 = 'd9f3ec9e118d63f1'

pixel = '7d6f70885c7360cc'
emulator_5554 = '6bdcbc41bec8aa43'

devices = {'14258df51f9911c3': 'S20', '7d6f70885c7360cc': 'pixel', '6bdcbc41bec8aa43': 'emulator_5554',
           '39c113e36bc53079': 'S20_1', 'd9f3ec9e118d63f1': 'S20_2'}

thirty_minutes = 1800000
thirty_seconds = 30000


def load_channel_status(channels):
    channelStatus = {}
    for channel in channels:
        channelStatus[channel] = False
    return channelStatus


class Test:

    def __init__(self, sender, receiver, action, extras, channels, timeout=thirty_seconds, uuid=generate_UUID(),
                 backhaul_receiver_id=None, backhaul=False):
        self.sender = sender
        self.receiver = receiver
        self.backhaul_receiver_id = backhaul_receiver_id
        self.backhaul = backhaul
        self.action = action
        self.extras = extras
        self.channels = channels
        self.timeout = timeout
        self.uuid = uuid
        self.channelStatus = load_channel_status(channels)

    def tojson(self):
        return {
            "sender": str(self.sender),
            "receiver": str(self.receiver),
            "action": str(self.action),
            "extras": str(self.extras),
            "channels": self.channels,
            "timeout": str(self.timeout),
            "uuid": str(self.uuid),
            "backhaul": self.backhaul,
        }


class Channel(Enum):
    _None = 1
    Satellite = 2
    Radio = 3
    Cellular = 4


channelArray = [Channel.Satellite, Channel.Radio, Channel.Cellular]

test1 = Test(sender=S20,
             receiver=pixel,
             action=ACTION_SEND_MESSAGE,
             extras="Hello World",
             channels=[Channel.Radio.name],
             timeout=thirty_minutes,
             uuid=generate_UUID())

test2 = Test(sender=S20,
             receiver=pixel,
             action=ACTION_SEND_MESSAGE,
             extras="Hello World",
             channels=[Channel.Radio.name, Channel.Cellular.name],
             uuid=generate_UUID())

test3 = Test(sender=S20,
             receiver=pixel,
             action=ACTION_SEND_MESSAGE,
             extras="Hello World",
             channels=[Channel.Cellular.name],
             timeout=thirty_minutes,
             uuid=generate_UUID())

## this works actually works out really nicely, setting the backhaul as the receiver id forces
## WSS to enable the ONLY the backhaul recipient MT client to respond to the test. So we only get a callback
## from the backhaul client
cell_backhaul_test = Test(sender=S20,
                          receiver=S20_1,
                          backhaul=True,
                          action=ACTION_SEND_MESSAGE,
                          extras="Hello World",
                          channels=[Channel.Radio.name, Channel.Cellular.name],
                          timeout=thirty_minutes,
                          uuid=generate_UUID())
