"""
Kurzbeschreibungen für Jam-Shop-Produkte (aus Ordner, VERKAUF.md, Fiverr-Text).
"""

from __future__ import annotations

import re
from pathlib import Path

MAX_DESC_LEN = 280

# Slug-Fragment im Ordnernamen → Verkaufstext (deutsch)
SLUG_BLURBS: dict[str, str] = {
    "python-mini-tool": (
        "Fertiges Python-Skript zum sofortigen Start: kleines Tool mit README, "
        "anpassbar in Cursor. Ideal für Automatisierung, Mini-Aufgaben oder Lernen."
    ),
    "jam-sticker-pack-digital": (
        "Digitales Sticker-Paket von Jam – PNG-Dateien für Discord, Social Media "
        "oder Messaging. Sofort downloaden nach Zahlung."
    ),
    "one-page-webseite": (
        "Moderne One-Page-Webseite (HTML/CSS): responsive, dunkles Design, "
        "PayPal-Button – perfekt für Portfolio, Link-in-Bio oder kleines Business."
    ),
    "moderne-one-page-webseite": (
        "Webseite 2026-Look: Gradient, Karten, Sticky-Nav, Leistungen & Preise – "
        "selbst programmiert, mobil optimiert."
    ),
    "moderne-webseite-design": (
        "Komplette moderne Webseite mit Hero, Services, Kontakt – Jam-Design, "
        "Hosting-Anleitung inklusive."
    ),
    "business-webseite-mehrseitig": (
        "Mehrseitige Business-Webseite: index, Leistungen, Kontakt – einheitliches modernes Design."
    ),
    "portfolio-webseite-modern": (
        "Portfolio für Projekte, Gaming oder Freelance – modern, mit Shop-/Social-Links."
    ),
    "gaming-tipps-paket-pdf-tex": (
        "Gaming-Tipps als Text/PDF: kompakte Strategien und Checklisten "
        "für besseres Spiel – digital, ohne Versand."
    ),
    "e-mail-vorlagen-paket": (
        "Professionelle E-Mail-Vorlagen auf Deutsch: Anfragen, Follow-ups, "
        "Dankes-Mails – copy & paste, sofort nutzbar."
    ),
    "apex-quick-coach-cheat-she": (
        "Apex Legends Quick-Coach: Cheat-Sheet mit Rotation, Loot und Fight-Tipps "
        "– kompakt zum Nachschlagen beim Ranked."
    ),
    "jam-mini-wallpaper-cent": (
        "Exklusives Jam-Wallpaper (PNG) für Desktop oder Handy – "
        "günstiger Cent-Preis, sofortiger Download."
    ),
    "jam-danke-tipp-cent": (
        "Kleiner Danke-Beitrag an Jam & David – Unterstützung mit PayPal "
        "im Cent-Bereich. Jeder Betrag zählt."
    ),
    "jam-sound-mini-clip": (
        "Kurzer digitaler Sound/Mini-Clip von Jam – für Alerts, Streams "
        "oder Projekte. Sofortlieferung als Datei."
    ),
    "jam-profil-badge-png": (
        "Profil-Badge als PNG – für Discord, Forum oder Social Profile. "
        "Jam-Design, transparent nutzbar."
    ),
    "minecraft-server-leitung": (
        "Minecraft Server Leitung: Paper/Spigot Setup, Plugins, Rechte, Backups "
        "und laufender Support – für Community- oder Freundes-Server."
    ),
    "minecraft-java-plugins": (
        "Custom Java-Plugins für Paper/Spigot: Commands, Events, Minigames – "
        "inkl. plugin.yml und Build-Anleitung."
    ),
    "minecraft-skripte-datenpacks": (
        "Minecraft Skripte (Skript-Plugin), Datenpacks oder leichte Automatisierung – "
        "ohne große Java-Mod, schnell anpassbar."
    ),
    "discord-bot-skript-befehle": (
        "Discord-Bot mit eigenen Python-Skripten: Befehle wie !ping, !shop führen "
        "registrierte Skripte aus – sicher, whitelist, selbst geschrieben."
    ),
    "discord-custom-skripte": (
        "Custom Discord-Skripte programmieren: neuer Befehl = neue .py Datei + "
        "Eintrag in scripts.json – Admin-Befehle optional."
    ),
    "minecraft-komplett-paket-server": (
        "Komplett-Paket: Server einrichten, Java-Plugins, Skripte, Doku und Support – "
        "alles für deinen Minecraft-Server aus einer Hand."
    ),
}


def _clean(text: str, max_len: int = MAX_DESC_LEN) -> str:
    t = re.sub(r"\*\*([^*]+)\*\*", r"\1", text)
    t = re.sub(r"\s+", " ", t).strip()
    if len(t) <= max_len:
        return t
    cut = t[: max_len - 1].rsplit(" ", 1)[0]
    return (cut or t[: max_len - 1]) + "…"


def _folder_slug(folder_name: str) -> str:
    parts = folder_name.lower().split("-")
    if len(parts) >= 3 and parts[0].isdigit() and len(parts[0]) == 8:
        return "-".join(parts[2:])
    return folder_name.lower()


def blurb_from_slug(folder_name: str) -> str | None:
    slug = _folder_slug(folder_name)
    for key, blurb in SLUG_BLURBS.items():
        if key in slug or slug.startswith(key[:12]):
            return blurb
    return None


def blurb_from_title(title: str) -> str:
    t = title.lower()
    for key, blurb in SLUG_BLURBS.items():
        hint = key.replace("-", " ")
        if hint[:12] in t or key.replace("jam-", "")[:10] in t.replace(" ", "-"):
            return blurb
    if "python" in t:
        return SLUG_BLURBS["python-mini-tool"]
    if "business" in t and "web" in t:
        return SLUG_BLURBS["business-webseite-mehrseitig"]
    if "portfolio" in t:
        return SLUG_BLURBS["portfolio-webseite-modern"]
    if "modern" in t and "web" in t:
        return SLUG_BLURBS["moderne-webseite-design"]
    if "webseite" in t or "landing" in t or "website" in t:
        return SLUG_BLURBS["moderne-one-page-webseite"]
    if "sticker" in t:
        return SLUG_BLURBS["jam-sticker-pack-digital"]
    if "gaming" in t or "tipp" in t and "danke" not in t:
        return SLUG_BLURBS["gaming-tipps-paket-pdf-tex"]
    if "e-mail" in t or "email" in t:
        return SLUG_BLURBS["e-mail-vorlagen-paket"]
    if "apex" in t:
        return SLUG_BLURBS["apex-quick-coach-cheat-she"]
    if "wallpaper" in t:
        return SLUG_BLURBS["jam-mini-wallpaper-cent"]
    if "danke" in t or "tipp" in t:
        return SLUG_BLURBS["jam-danke-tipp-cent"]
    if "sound" in t or "clip" in t:
        return SLUG_BLURBS["jam-sound-mini-clip"]
    if "badge" in t or "profil" in t:
        return SLUG_BLURBS["jam-profil-badge-png"]
    if "discord" in t:
        if "skript" in t or "custom" in t or "python" in t:
            return SLUG_BLURBS["discord-custom-skripte"]
        return SLUG_BLURBS["discord-bot-skript-befehle"]
    if "minecraft" in t and "komplett" in t:
        return SLUG_BLURBS["minecraft-komplett-paket-server"]
    if "minecraft" in t and ("java" in t or "plugin" in t):
        return SLUG_BLURBS["minecraft-java-plugins"]
    if "minecraft" in t and ("skript" in t or "datenpack" in t):
        return SLUG_BLURBS["minecraft-skripte-datenpacks"]
    if "minecraft" in t or "server leitung" in t:
        return SLUG_BLURBS["minecraft-server-leitung"]
    return (
        f"Digitales Produkt „{title}“ von Jam – sofort nach PayPal-Zahlung: "
        "Dateien im Projektordner, inkl. README und Verkaufsinfos."
    )


def _from_verkauf(verka: str) -> str | None:
    if not verka:
        return None
    m = re.search(r"##\s*Beschreibung\s*\n+(.+?)(?:\n##|\n- \*\*|\Z)", verka, re.I | re.S)
    if m:
        return _clean(m.group(1).strip())
    return None


def _from_fiverr(path: Path) -> str | None:
    if not path.is_file():
        return None
    text = path.read_text(encoding="utf-8", errors="ignore")
    m = re.search(r"BESCHREIBUNG:\s*\n+(.+?)(?:\n\n|PAKETE|TAGS:)", text, re.I | re.S)
    if not m:
        return None
    block = m.group(1).strip()
    lines = [ln.strip() for ln in block.splitlines() if ln.strip() and not ln.startswith("✅")]
    if not lines:
        return None
    return _clean(" ".join(lines[:3]))


def _from_projekt(path: Path) -> str | None:
    if not path.is_file():
        return None
    text = path.read_text(encoding="utf-8", errors="ignore")
    m = re.search(r"##\s*Recherche\s*\n+(.+?)(?:\n##|\Z)", text, re.I | re.S)
    if m:
        line = m.group(1).strip().splitlines()[0]
        if line and "interessant" not in line.lower() and len(line) > 12:
            return _clean(line)
    return None


def product_description(
    folder: Path,
    *,
    title: str,
    verka: str = "",
    meta: dict | None = None,
) -> str:
    meta = meta or {}
    if meta.get("description"):
        return _clean(str(meta["description"]))

    try:
        from jam.shop_catalog import catalog_entry_for_product

        entry = catalog_entry_for_product(title, folder.name)
        if entry:
            summary = entry.get("summary", "")
            first = (entry.get("what_it_does") or [""])[0]
            combined = f"{summary} {first}"
            return _clean(combined, max_len=320)
    except Exception:
        pass

    for parser in (
        lambda: _from_verkauf(verka),
        lambda: blurb_from_slug(folder.name),
        lambda: blurb_from_title(title),
        lambda: _from_fiverr(folder / "FIVERR_GIG.txt"),
        lambda: _from_projekt(folder / "PROJEKT.md"),
    ):
        got = parser()
        if got:
            return got
    return blurb_from_title(title)


def blurb_for_template_title(title: str) -> str:
    """Für neue VERKAUF.md-Einträge beim Verkauf."""
    try:
        from jam.fiverr_connect import _offering_for_title

        o = _offering_for_title(title)
        if o:
            return o["description"]
    except Exception:
        pass
    return blurb_from_title(title)
