"""Antwort-Auswahl: Pools pro Intent plus Sender-Gedaechtnis.

Kein Sender bekommt zweimal hintereinander dieselbe Formulierung —
das ist das Auffaelligste an stumpfen Auto-Reply-Bots.
"""
import random

from .rules import (
    INTENT_BYE, INTENT_GREETING, INTENT_INVITE, INTENT_QUESTION_SPOT,
    INTENT_SMALLTALK, INTENT_THANKS, INTENT_UNKNOWN,
)

POOLS = {
    INTENT_GREETING: (
        'hey', 'hi', 'hey, sry war kurz afk', 'hallo',
        'hi, was gibt\'s?',
    ),
    INTENT_SMALLTALK: (
        'alles gut, bin am hunten', 'passt, und bei dir?',
        'läuft, grade viel respawn hier', 'jo alles ok',
    ),
    INTENT_QUESTION_SPOT: (
        'bin noch ne weile hier, sry', 'jag grad, spot ist besetzt',
        'komm später gern wieder, brauch noch ~30 min',
        'sry, bin noch am leveln hier',
    ),
    INTENT_INVITE: (
        'danke, aber ich grind grad solo', 'passt grad nicht, vlt später',
        'sry, bin gleich eh off', 'net von dir, aber ich bleib solo',
    ),
    INTENT_THANKS: (
        'np', 'gern', 'kein ding', ':)',
    ),
    INTENT_BYE: (
        'cya', 'bb, viel erfolg', 'bis dann', 'ciao',
    ),
    INTENT_UNKNOWN: (
        'sry, was meinst du?', 'hmm?', 'wie bitte?',
    ),
}


class ReplyMemory:
    """Merkt sich pro Sender die letzten Antworten (Anti-Wiederholung)."""

    def __init__(self, per_sender=3):
        self.per_sender = per_sender
        self.history = {}

    def pick(self, sender, intent):
        pool = POOLS.get(intent, POOLS[INTENT_UNKNOWN])
        used = self.history.get(sender, [])
        candidates = [reply for reply in pool if reply not in used]
        if not candidates:
            candidates = list(pool)
            used = []
        reply = random.choice(candidates)
        self.history[sender] = (used + [reply])[-self.per_sender:]
        return reply
