import keyboard
import mouse
import math


class HumanActions:
    def __init__(self, mouseDiscount: float = 10, screenW: int = 1920, screenH: int = 1080):
        def multiPressed():
            pass

        keyboard.add_hotkey("w+a", multiPressed)
        keyboard.add_hotkey("w+d", multiPressed)
        keyboard.add_hotkey("s+a", multiPressed)
        keyboard.add_hotkey("s+d", multiPressed)
        self.screenW = screenW
        self.screenH = screenH
        self.MOUSEDISCOUNT = mouseDiscount
        self.mouseSmooth = 5
        self.mouseMax = 10

    def getHumanActions(self):
        x, _ = mouse.get_position()
        xMovement = (x - self.screenW / 2) / self.MOUSEDISCOUNT
        xMovement = self.smoothMouseMovement(xMovement)
        ws = 0
        ad = 0
        click = 0
        if keyboard.is_pressed("w"):
            ws = 1
        elif keyboard.is_pressed("s"):
            ws = 2
        if keyboard.is_pressed("d"):
            ad = 1
        elif keyboard.is_pressed("a"):
            ad = 2
        if keyboard.is_pressed("w+d"):
            ws = 1
            ad = 1
        elif keyboard.is_pressed("w+a"):
            ws = 1
            ad = 2
        elif keyboard.is_pressed("s+d"):
            ws = 2
            ad = 1
        elif keyboard.is_pressed("s+a"):
            ws = 2
            ad = 2
        if keyboard.is_pressed("0"):
            click = 1

        actions = [ws, ad, click, xMovement]

        mouse.move(self.screenW / 2, self.screenH / 2)
        return actions

    def smoothMouseMovement(self, x: float):
        out = (1 / (1 + math.exp(-x / self.mouseSmooth)) - 1 / 2) * self.mouseMax * 2
        return out