"""Bremse fuer Ring-/Amulett-Tausch, der ins Leere laeuft.

Der Tausch drueckt eine Taste und prueft danach, ob der Ausruestungs-
Platz belegt ist. Ist der Ring gar nicht vorhanden - oder erkennt der
Bot den Platz nicht zuverlaessig - bleibt die Bedingung fuer immer
erfuellt, und die Taste wird in JEDER Schleifenrunde erneut gedrueckt.

Beobachtet: eine Konfiguration mit Hotkey "t" und Schwelle
"HP > 0" (also immer wahr) bei einem Charakter ohne Ring. Der Bot
tippte daraufhin endlos "t" - im Spiel wirkungslos, aber sobald die
Chatzeile den Fokus hatte, landete jedes einzelne "t" dort.

Darum: Nach ein paar wirkungslosen Versuchen wird aufgehoert. Aendert
sich der Zustand doch noch (Ring aufgehoben, Ausruestung getauscht),
faengt die Zaehlung von vorn an.
"""

MAX_VERSUCHE = 3

_versuche = {}


def darfDruecken(bereich: str, hotkey) -> bool:
    """False, sobald derselbe Tausch mehrfach nichts bewirkt hat."""
    if not hotkey:
        return False
    return _versuche.get((bereich, hotkey), 0) < MAX_VERSUCHE


def merkeVersuch(bereich: str, hotkey) -> None:
    schluessel = (bereich, hotkey)
    _versuche[schluessel] = _versuche.get(schluessel, 0) + 1


def zuruecksetzen(bereich: str) -> None:
    """Nach einem erfolgreichen Tausch wieder scharf schalten."""
    for schluessel in [k for k in _versuche if k[0] == bereich]:
        del _versuche[schluessel]
