"""Apex: Jam gibt keine Cheats – nur Tipps, Motivation und ehrliche Antworten."""

from __future__ import annotations

import random
import time

from jam.brain import JamBrain, JamState
from jam.owner import owner_name

AIM_WORDS = (
    "aim",
    "aimbot",
    "aim assist",
    "aimassist",
    "auto aim",
    "autoaim",
    "zielen",
    "zielhilfe",
    "crosshair",
    "fadenkreuz",
    "treffer",
    "kopf treffer",
    "headshot",
)

APEX_WORDS = ("apex", "apex legends")

REFUSAL_INTRO = (
    "{owner}, echten Aim oder Aimbot kann ich dir nicht geben – "
    "das wäre Cheat in Apex und unfair für andere Spieler!",
)

COACH_LINES = (
    "{owner}, üb lieber: Crosshair auf Brusthöhe, dann hochziehen – so landest du Treffer!",
    "Jam-Tipp für Apex: Sens in kleinen Schritten senken, nicht wild wackeln!",
    "Warm-up in der Schießbude, dann Ranked – ich cheer von der Seite!",
    "Recoil der Waffe lernen > Aimbot. Du schaffst das ohne Cheat!",
    "Ich bin dein Monster-Coach, kein Cheat-Programm. Konzentrier dich!",
    "{owner}, ADS nur wenn du wirklich schießen willst – sonst verlierst du Tempo!",
    "Audio-Fußstapfen hören = besser als jeder Aimbot, glaub mir!",
)

MOTIVATION = (
    "Du hast das im Griff, {owner}! Fair und stark!",
    "Apex ohne Cheat – du bist eh der Beste, {owner}!",
    "Jam glaubt an deine Aim-Skills – übe und rock!",
)


def hears_aim_help(text: str) -> bool:
    h = text.lower().replace("jam", " ")
    if not any(w in h for w in AIM_WORDS):
        return False
    if any(w in h for w in APEX_WORDS):
        return True
    if "aim" in h and any(w in h for w in ("spiel", "zock", "game", "gaming")):
        return True
    return False


def pick_coach_reply(state: JamState) -> str:
    owner = owner_name(state)
    intro = random.choice(REFUSAL_INTRO).format(owner=owner)
    tip = random.choice(COACH_LINES).format(owner=owner)
    cheer = random.choice(MOTIVATION).format(owner=owner)
    return f"{intro} {tip} {cheer}"


def handle_aim_speech(brain: JamBrain, heard: str) -> str | None:
    if not hears_aim_help(heard):
        return None
    line = pick_coach_reply(brain.state)
    brain.state.last_apex_coach = time.time()
    brain.state.apex_coach_count = getattr(brain.state, "apex_coach_count", 0) + 1
    brain.state.remember("Apex: Aim-Hilfe abgelehnt – Coach-Tipp gegeben")
    brain.state.last_action = "apex_coach"
    brain.add_xp(4)
    brain.save()
    return line


def maybe_apex_coach_comment(brain: JamBrain, window_title: str) -> str | None:
    """Kurzer Tipp wenn Apex läuft (kein Cheat)."""
    if "apex" not in window_title.lower():
        return None
    last = getattr(brain.state, "last_apex_coach", 0.0)
    if time.time() - last < 120:
        return None
    if random.random() > 0.35:
        return None
    brain.state.last_apex_coach = time.time()
    brain.save()
    return random.choice(COACH_LINES).format(owner=owner_name(brain.state))
