# recommendations.py

def build_recommendations(impressions, reach, frequency, clicks, link_clicks, lpv,
                          ctr, cpm, cpc, cpl, budget_eur, amount_spent, leads):
    """
    Return an organized, human-readable recommendations text based on KPI thresholds.
    Uses the same inputs as calc_score. Only emits recommendations for TRUE conditions.
    """

    # safe numeric conversion
    def nf(x):
        try:
            return float(x or 0)
        except:
            return 0.0

    impressions  = nf(impressions)
    reach        = nf(reach)
    frequency    = nf(frequency)
    clicks       = nf(clicks)
    link_clicks  = nf(link_clicks)
    lpv          = nf(lpv)
    ctr          = nf(ctr)          # NOTE: pass CTR as % (e.g., 1.2 for 1.2)
    cpm          = nf(cpm)
    cpc          = nf(cpc)
    cpl          = nf(cpl)
    budget_eur   = nf(budget_eur)
    amount_spent = nf(amount_spent)
    leads        = nf(leads)

    recs = []

    # ---- Delivery (Impressions / Reach / Frequency)
    block = []
    if impressions < 1000:
        block.append("Die Impressionen sind niedrig → Erhöhen Sie das Budget, erweitern Sie das Publikum oder beheben Sie Lieferprobleme.")
    if reach < 500:
        block.append("Die Reichweite ist gering → Erweitern Sie das Publikum oder lockern Sie die Targeting-Beschränkungen.")
    if frequency > 3:
        block.append("Hohe Frequenz (>3) → Kreative aktualisieren oder Zielgruppe erweitern, um Ermüdung zu vermeiden.")
    if block:
        recs.append("Delivery:\n - " + "\n - ".join(block))

    # ---- Engagement (Clicks / Link Clicks / LPV / CTR)
    block = []
    if clicks < 50:
        block.append("Wenige Klicks → Überschriften, Hooks und Haupttext verbessern.")
    if link_clicks < 30:
        block.append("Wenige Link-Klicks → Stärkung des CTA und der Relevanz zwischen Anzeige und Zielseite.")
    if lpv < 10:
        block.append("Wenige Aufrufe der Zielseite → Überprüfen Sie die Seitengeschwindigkeit, das Tracking und die Absicht vor dem Klick.")
    if ctr < 0.8:
        block.append("CTR < 0,8 % → Testen Sie neue Creatives (Bilder/Videos), Blickwinkel und Angebote.")
    if block:
        recs.append("Engagement:\n - " + "\n - ".join(block))

    # ---- Cost Efficiency (CPM / CPC)
    block = []
    if cpm > 70:
        block.append("CPM > 70 € → ein breiteres oder anderes Publikum ansprechen; Creatives auffrischen.")
    elif 40 < cpm <= 70:
        block.append("CPM im mittleren Bereich (40–70 €) → überwachen; Zielgruppenüberschneidungen und Platzierungen optimieren.")
    if cpc > 5:
        block.append("CPC > 5 € → Kreative wahrscheinlich schwach oder teures Targeting; Kreative und Zielgruppe iterieren.")
    elif 3 < cpc <= 5:
        block.append("CPC 3–5 € → akzeptabel; mit stärkeren Creatives eine Senkung anstreben.")
    if block:
        recs.append("Cost Efficiency:\n - " + "\n - ".join(block))

    # ---- Lead Economics (CPL vs Budget + Spend/Lead)
    block = []
    if budget_eur > 0:
        if cpl > 2 * budget_eur:
            block.append("CPL > 2× Tagesbudget → diesen Anzeigensatz pausieren/löschen oder Targeting und Creatives überarbeiten.")
        elif 80 < cpl <= 2 * budget_eur:
            block.append("CPL ist im Vergleich zum Budget hoch → Form, Zielgruppe und Vorqualifikation optimieren.")
        else:
            # good CPL relative to budget; no warning
            pass
    else:
        if cpl > 50:
            block.append("CPL > 50 € ohne Bezug zum Tagesbudget → wahrscheinlich ineffizient; optimieren oder pausieren.")

    # Spend per Lead (lifetime ratio)
    ratio = (amount_spent / leads) if leads > 0 else None
    if ratio is None:
        block.append("Noch keine Leads → Überprüfen Sie vor der Skalierung die Übereinstimmung von Tracking, Angebot und Zielgruppe.")
    else:
        if ratio < 90:
            block.append("Ausgaben/Lead < 90 € → gute Kosteneffizienz; bei stabilem Volumen vorsichtige Skalierung in Betracht ziehen.")
        elif 90 <= ratio < 150:
            block.append("Ausgaben/Lead 90–150 € → grenzwertig; Creatives und Targeting optimieren.")
        else:
            block.append("Ausgaben/Lead ≥ 150 € → ineffizient; Targeting/Angebot pausieren oder überarbeiten.")

    if block:
        recs.append("Lead Economics:\n - " + "\n - ".join(block))

    # ---- Positive signals (only when clearly strong)
    positives = []
    if ctr >= 1.5 and cpc < 2.0:
        positives.append("Starkes Engagement (CTR ≥ 1,5 % und CPC < 2 €) → Erfolgreiche Variante skalieren oder duplizieren.")
    if leads >= 10 and (0 < cpl <= max(20, budget_eur)):  # CPL good vs. budget or absolute low
        positives.append("Gesundes Lead-Volumen bei niedrigem CPL → Budget schrittweise erhöhen.")
    if positives:
        recs.append("Opportunities:\n - " + "\n - ".join(positives))

    # ---- Fallback when no recommendations were triggered
    if not recs:
        return "Alle KPIs scheinen stabil zu sein. Behalten Sie die aktuelle Konfiguration bei und überwachen Sie sie täglich."

    return "\n".join(recs)
