#!/home/agent/venv/bin/python3
"""Generate social-media drafts for Plappi (value-first community posts,
own-channel posts, or comments). Creates a 'pending' item; nothing is posted
automatically into communities — see PLATTFORM-RICHTLINIEN.md. Imported by CLI.
"""
from __future__ import annotations

import sys
from datetime import date
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parent))
from marketing_lib import (
    run_claude, insert_item, get_item, get_target, disclosure_for,
    format_for_wa, wa_send, log,
)

PRODUCT_FACTS = """PRODUKT — Plappi: displayloses, sprachgesteuertes Sprachlern-Gerät für
zwei-/mehrsprachige Kinder (2–15 J.), 27 Sprachen, screen-free, privacy-first (Daten in EU,
kein KI-Training). Wiener Startup, Kickstarter-Launch 24.06.2026. Warteliste: helloplappi.com."""

SYSTEM_PROMPT = """Du schreibst Social-Media-Beiträge für die Marke Plappi. Oberstes Gesetz:
VALUE-FIRST. Der Beitrag muss für Eltern echten Mehrwert haben (Tipp, Frage, Erfahrung) —
nie reiner Werbespam, sonst Bann/Ablehnung in Communities.

REGELN je Modus:
- manual_community (Reddit/FB-Gruppe/Forum): Schreib einen ECHTEN, hilfreichen Beitrag/Kommentar
  aus Eltern-/Gründer-Perspektive. Plappi höchstens dezent + ehrlich erwähnen ("ich baue gerade…"),
  Founder-Offenlegung. Ton der Plattform treffen (Reddit locker, DE-Forum sachlich).
- auto_own (eigener IG/TikTok/LinkedIn-Kanal): Du DARFST direkt bewerben. Hook + Substanz + 1 CTA.
- Sprache: wie beim Ziel angegeben (de/en).
- Kennzeichnung: Wenn der Beitrag Plappi bewirbt, baue dezent "Werbung" bzw. "Eigenwerbung" ein
  (AT/DE-Pflicht), bei community-Beiträgen nur falls tatsächlich werblich.
- Länge: Reddit/Forum 60–150 Wörter; IG/TikTok-Caption 30–80 Wörter; LinkedIn 120–200 Wörter.
- Keine erfundenen Fakten. Keine Emoji-Wolken (max. 1–2). Keine Hashtag-Berge (max. 3, sinnvoll).

OUTPUT: nur der fertige Beitragstext, keine Vorrede, kein Markdown-Codeblock."""


def generate_social(target, kind: str = "post", topic: str = "", model: str = "haiku"):
    mode = target["posting_mode"]
    user = f"""{PRODUCT_FACTS}

ZIEL: {target['name']}  ·  PLATTFORM: {target['platform']}  ·  MODUS: {mode}
SPRACHE: {target['language']}
ART: {'Kommentar/Antwort' if kind == 'comment' else 'Beitrag/Post'}
THEMA/ANLASS: {topic or '(frei wählen, passend zur Zielgruppe Eltern mehrsprachiger Kinder)'}
PLATTFORM-REGEL: {target['rules'] or '(keine)'}

Schreib den Beitrag nach Stilvorgabe."""
    body = run_claude(user, SYSTEM_PROMPT, model=model, label="social_draft").strip()
    return body, user


def draft_for_target(target_id: int, kind: str = "post", topic: str = "",
                     auto_send: bool = False, model: str = "haiku") -> int:
    t = get_target(target_id)
    if not t:
        raise SystemExit(f"target {target_id} not found")
    body, prompt = generate_social(t, kind, topic, model)
    disclosure = disclosure_for(t["posting_mode"])
    type_ = "social_comment" if kind == "comment" else "social_post"
    iid = insert_item(target_id=t["id"], channel="social", type_=type_,
                      platform=t["platform"], subject=None, body=body,
                      disclosure=disclosure, scheduled_for=date.today().isoformat(),
                      thread_ref=topic or None, prompt_used=prompt, model_used=model)
    log(f"social draft #{iid} → {t['name']} ({kind})")
    if auto_send:
        wa_send(format_for_wa(get_item(iid), t))
    return iid
