from src.repositories.actionBar.slotIcons import getSlotCenter
from src.utils import keyboard
from src.utils.mouse import leftClick
from ...typings import Context
from .common.base import BaseTask


class UseSlotItemTask(BaseTask):
    """Nutzt ein Item ueber seinen Action-Bar-Slot statt ueber einen Hotkey.

    ponytail: Vertraut dem letzten Sync ("Hotkeys syncen"-Button) — der
    Slot-Inhalt wird nicht pro Klick erneut geprueft. Grenze: nach
    manuellem Umbau der Action Bar ist ein erneuter Sync noetig.
    Faellt auf den Hotkey zurueck, wenn keine Action Bar gefunden wird.
    """

    def __init__(self, slot: int, fallbackHotkey: str = None, delayAfterComplete: int = 1):
        super().__init__()
        self.name = 'useSlotItem'
        self.delayAfterComplete = delayAfterComplete
        self.slot = slot
        self.fallbackHotkey = fallbackHotkey

    def do(self, context: Context) -> Context:
        center = getSlotCenter(context['ng_screenshot'], self.slot)
        if center is not None:
            leftClick(center)
        elif self.fallbackHotkey:
            keyboard.press(self.fallbackHotkey)
        return context
