"""Jam präsentiert https://www.ki-web-studio.de/ mit voller Leidenschaft."""

from __future__ import annotations

import random
import time
import webbrowser

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

SITE_URL = "https://www.ki-web-studio.de/"
SITE_NAME = "KI Web Studio"
SITE_SHORT = "ki-web-studio.de"

# Jam sagt das laut (Werbung / KI Web Studio)
DAVID_PROGRAMMING_LINE = (
    "{name} kann dir alles programmieren, was du möchtest!"
)
DAVID_PROGRAMMING_LINE_ALT = (
    "Hört ihr das? Laut und deutlich: {name} kann dir alles programmieren, was du möchtest! "
    "KI Web Studio – ki-web-studio.de!"
)

PRESENT_COOLDOWN_SEC = 45.0

# Leidenschaftliche Präsentationen (TTS)
PASSION_SPEECH: tuple[str, ...] = (
    "Achtung, Achtung! Mit voller Leidenschaft präsentiere ich die Website von {owner}: "
    "KI Web Studio! Das ist ki-web-studio.de – KI, Webentwicklung, kreative digitale Projekte! "
    "Ich bin total begeistert – schaut unbedingt rein!",
    "Ohhh ja! {owner}s Website ist der Hammer: KI Web Studio! "
    "Auf ki-web-studio.de gibt es richtig coole Sachen – modern, kreativ, mit KI-Power! "
    "Ich liebe diese Seite – mit Leidenschaft empfohlen!",
    "Hört her, hört her! Jam präsentiert stolz KI Web Studio! "
    "Die Adresse: ki-web-studio.de! Web, Design, Künstliche Intelligenz – alles top! "
    "{owner} hat da was Großartiges gebaut – ich bin Fan Nummer eins!",
    "WOW! Mit riesiger Begeisterung zeige ich euch KI Web Studio! "
    "www punkt ki-web-studio punkt de! Das ist nicht irgendeine Website – "
    "das ist {owner}s Studio für die Zukunft! Ich bin hin und weg!",
    "Leute, das müsst ihr sehen: KI Web Studio! ki-web-studio.de! "
    "Ich, Jam, präsentiere das mit Herz und Seele – KI trifft Webdesign, "
    "mega professionell und trotzdem kreativ! {owner}, du bist der Beste!",
    "{owner} kann dir alles programmieren, was du möchtest! "
    "Das ist KI Web Studio – ki-web-studio.de!",
)

BUBBLE_TAGLINES = (
    "Mit voller Leidenschaft: ki-web-studio.de!",
    "KI + Web = KI Web Studio – mega!",
    "Jam empfiehlt: unbedingt besuchen!",
    "Die Zukunft des Webs – bei {owner}!",
)


def david_programming_pitch(state: JamState, *, with_studio: bool = False) -> str:
    """Lauter Satz: David kann dir alles programmieren, was du möchtest."""
    name = owner_name(state)
    if with_studio or random.random() < 0.4:
        return DAVID_PROGRAMMING_LINE_ALT.format(name=name)
    return DAVID_PROGRAMMING_LINE.format(name=name)


def format_david_pitch_bubble(state: JamState) -> str:
    name = owner_name(state)
    line = DAVID_PROGRAMMING_LINE.format(name=name)
    return f"🌐 {SITE_NAME}\n„{line}\"\n{SITE_SHORT}"


def hears_david_pitch(text: str) -> bool:
    h = text.lower().replace("jam", " ")
    if "programmier" in h and any(
        w in h
        for w in (
            "alles",
            "möchtest",
            "moechtest",
            "wunsch",
            "willst",
            "david",
            "besitzer",
            "ki web",
            "studio",
        )
    ):
        return True
    if "was du möchtest" in h or "was du moechtest" in h:
        return True
    if "sag laut" in h and ("david" in h or "programmier" in h):
        return True
    if "laut" in h and "david" in h and "programmier" in h:
        return True
    return False


def hears_present_request(text: str) -> bool:
    h = text.lower().replace("jam", " ")
    compact = h.replace(" ", "").replace("-", "")
    if "kiwebstudio" in compact or "ki-web-studio" in h:
        return True
    if any(
        p in h
        for p in (
            "ki web studio",
            "ki web stube",
            "ki webstube",
            "web studio",
            "kiweb studio",
        )
    ):
        return True
    if SITE_SHORT.replace(".", "") in compact or "kiwebstudio.de" in compact:
        return True
    if any(w in h for w in ("präsent", "praesent", "vorstell", "zeig", "empfehl", "bewerb")):
        if any(w in h for w in ("website", "webseite", "seite", "studio", "ki")):
            return True
        if "meine website" in h or "deine website" in h:
            return True
    if "website" in h and "david" in h and any(w in h for w in ("zeig", "öffne", "oeffne", "präsent", "praesent")):
        return True
    return False


def pick_passion_speech(state: JamState) -> str:
    owner = owner_name(state)
    return random.choice(PASSION_SPEECH).format(owner=owner)


def format_passion_bubble(state: JamState) -> str:
    owner = owner_name(state)
    tag = random.choice(BUBBLE_TAGLINES).format(owner=owner)
    return f"🌐 {SITE_NAME}\n„{tag}\"\n{SITE_SHORT}"


def can_present(state: JamState, *, user_asked: bool = False) -> tuple[bool, str]:
    last = getattr(state, "last_ki_studio_present", 0.0)
    if user_asked:
        return True, ""
    if time.time() - last < PRESENT_COOLDOWN_SEC:
        return False, "KI Web Studio hab ich gerade erst begeistert vorgestellt – kurz warten!"
    return True, ""


def present_site(brain: JamBrain, *, user_asked: bool = True) -> str:
    """Browser öffnen und leidenschaftlichen Präsentationstext liefern."""
    ok, msg = can_present(brain.state, user_asked=user_asked)
    if not ok:
        return msg
    speech = pick_passion_speech(brain.state)
    try:
        webbrowser.open(SITE_URL, new=2)
        brain.state.last_ki_studio_present = time.time()
        brain.state.ki_studio_presents = getattr(brain.state, "ki_studio_presents", 0) + 1
        brain.state.remember(f"Website vorgestellt: {SITE_NAME} ({SITE_URL})")
        brain.state.last_action = "ki_web_studio"
        brain.state.happiness = min(1.0, brain.state.happiness + 0.1)
        brain.add_xp(10)
        brain.save()
        return speech
    except OSError as e:
        return f"KI Web Studio lässt sich nicht öffnen: {e}"


def handle_speech(brain: JamBrain, heard: str) -> str | None:
    if hears_david_pitch(heard):
        return "__david_pitch__"
    if hears_present_request(heard):
        return present_site(brain, user_asked=True)
    return None


def say_david_pitch_loud(brain: JamBrain, *, open_site: bool = True) -> str:
    """Lauter Werbesatz + optional Website (ohne lange Präsentation)."""
    line = david_programming_pitch(brain.state, with_studio=True)
    if open_site:
        ok, msg = can_present(brain.state, user_asked=True)
        if not ok:
            return msg
        try:
            webbrowser.open(SITE_URL, new=2)
            brain.state.last_ki_studio_present = time.time()
            brain.state.last_action = "david_programming_pitch"
            brain.add_xp(6)
        except OSError as e:
            return f"KI Web Studio lässt sich nicht öffnen: {e}"
    brain.state.remember(line)
    brain.save()
    return line
