#!/usr/bin/env python3
"""Met à jour la fiche produit brouillon (id 15829) : naming marketing, textes SEO, visuels."""

from __future__ import annotations

import json
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "scripts"))

from article_studio.config import load_config
from article_studio.wp_client import _request, upload_media

PRODUCT_ID = 15829
ASSETS = ROOT / "exports" / "reponse-service-client-product"

PRODUCT_NAME = "Module PrestaShop brouillons de réponse service client"
SLUG = "module-prestashop-brouillon-reponse-service-client"

SHORT_DESCRIPTION = (
    "Générez des brouillons de réponse directement dans l'interface messages clients de PrestaShop 8+ : "
    "contexte commande, produit et suivi colis injectés automatiquement. Compatible OpenAI, Anthropic, "
    "Gemini ou Ochoa. Votre équipe relit et envoie — aucun envoi automatique au client."
)

DESCRIPTION_HTML = """<h2>Répondez plus vite aux messages clients sans perdre le contrôle</h2>
<p>Chaque jour, votre équipe reçoit les mêmes demandes : <em>« Où est mon colis ? »</em>, <em>« Puis-je retourner cet article ? »</em>, <em>« Ma commande est incomplète »</em>… Rédiger une réponse pertinente demande de consulter la commande, le transporteur, l'historique du fil.</p>
<p>Ce module génère un <strong>brouillon de réponse</strong> directement dans l'interface messages clients native de PrestaShop 8+. Un clic, le contexte est assemblé, une proposition de réponse apparaît — votre employé relit, ajuste et envoie.</p>

<h2>Contexte riche injecté automatiquement</h2>
<p>Le module collecte et transmet au moteur de rédaction :</p>
<ul>
<li><strong>Détails de commande</strong> — référence, statut, montant, adresse,</li>
<li><strong>Suivi colis</strong> — numéro, transporteur, URL de tracking,</li>
<li><strong>Statut transporteur en temps réel</strong> — Chronopost et autres (appel API lecture seule),</li>
<li><strong>Produit lié au fil</strong> — nom, référence, attributs,</li>
<li><strong>Historique des messages</strong> de la conversation,</li>
<li><strong>Informations boutique</strong> — délais, retours, horaires (configurables).</li>
</ul>

<h2>Plusieurs moteurs de rédaction au choix</h2>
<p>Configurez le fournisseur qui correspond à votre stack :</p>
<ul>
<li><strong>OpenAI</strong> (ChatGPT — gpt-4o, gpt-4o-mini…),</li>
<li><strong>Anthropic</strong> (Claude),</li>
<li><strong>Google Gemini</strong>,</li>
<li><strong>Ochoa</strong> (API compatible OpenAI, hébergement souverain).</li>
</ul>
<p>Prompt système personnalisable, température, tokens max, consigne ponctuelle par message.</p>

<h2>Intégration native au back-office</h2>
<p>Bouton <strong>« Générer la réponse »</strong> ajouté automatiquement sur la vue fil messages clients (Symfony et legacy). Compatible PrestaShop <strong>8.0 à 9</strong>.</p>
<ul>
<li>champ consigne optionnelle avant génération,</li>
<li>confirmation si le champ réponse contient déjà du texte,</li>
<li>option texte brut ou HTML,</li>
<li>option ajout de la signature service client PrestaShop,</li>
<li>sécurisation par cookie employé + jeton admin.</li>
</ul>

<h2>Sécurité et gouvernance</h2>
<p>Le module ne remplace pas votre équipe : il produit un <strong>brouillon</strong> que l'employé valide avant envoi. Aucune réponse automatique au client. Les clés API restent dans votre back-office PrestaShop.</p>

<h2>Compatibilité et installation</h2>
<ul>
<li>PrestaShop <strong>8.0.0 à 9</strong>,</li>
<li>interface multilingue (FR / EN),</li>
<li>installation plug &amp; play, configuration en quelques minutes,</li>
<li>développé en France par <strong>Latoutfrancais - Arnaud Merigeau</strong>.</li>
</ul>

<h2>Guide complet</h2>
<p>Besoin de creuser la méthode, le ROI, les KPIs et le déploiement pas à pas ? Consulte le <a href="https://www.arnaud-merigeau.fr/assistant-ia-service-client-prestashop-guide-complet/">guide exhaustif assistant IA service client PrestaShop</a> — comparatifs, FAQ, cas d'usage et checklist technique.</p>

<h2>Conclusion</h2>
<p>Ce module accélère le traitement des demandes service client e-commerce tout en conservant la qualité et le contrôle humain. Idéal pour les boutiques avec un volume régulier de messages clients.</p>
<p>Livraison immédiate du ZIP après achat, avec licence et mises à jour selon la durée choisie.</p>"""

YOAST_TITLE = "Module PrestaShop brouillon réponse service client - Rédaction automatique"
YOAST_METADESC = (
    "Module PrestaShop pour générer des brouillons de réponse service client avec contexte commande "
    "et suivi colis. OpenAI, Claude, Gemini. Compatible PS 8 à 9."
)
YOAST_FOCUS = "Module PrestaShop réponse service client"

IMAGE_FILES = [
    (
        "product-reponse-service-client-featured.png",
        "Module PrestaShop assistant IA service client - gain de temps réponses automatiques",
        True,
    ),
    (
        "product-reponse-service-client-admin.png",
        "Back-office PrestaShop - configuration brouillons réponses service client",
        False,
    ),
    (
        "product-reponse-service-client-thread.png",
        "Interface messages clients PrestaShop - génération brouillon de réponse",
        False,
    ),
    (
        "product-reponse-service-client-icon.png",
        "Module PrestaShop rédaction réponses service client - icône",
        False,
    ),
]

DOWNLOAD_NAME = "module-brouillon-reponse-service-client-prestashop-1.0.1"


def put_json(base_url: str, user: str, password: str, path: str, payload: dict) -> dict:
    url = f"{base_url.rstrip('/')}{path}"
    _, data = _request(
        "PUT",
        url,
        user,
        password,
        data=json.dumps(payload).encode("utf-8"),
        headers={"Content-Type": "application/json"},
    )
    return data


def main() -> None:
    cfg = load_config()
    base = cfg.wp_base_url
    user = cfg.wp_user
    pwd = cfg.wp_application_password.replace(" ", "")

    print("Upload des nouvelles images…")
    image_ids: list[int] = []
    featured_id: int | None = None
    for filename, alt, is_featured in IMAGE_FILES:
        path = ASSETS / filename
        if not path.is_file():
            raise FileNotFoundError(f"Visuel manquant : {path} — lancer generate_amsavai_product_assets.py")
        media = upload_media(base, user, pwd, path, alt_text=alt, title=alt)
        mid = int(media["id"])
        image_ids.append(mid)
        if is_featured:
            featured_id = mid
        print(f"  media {mid}: {filename}")

    _, current = _request(
        "GET",
        f"{base.rstrip('/')}/wp-json/wc/v3/products/{PRODUCT_ID}",
        user,
        pwd,
    )
    zip_url = ""
    for dl in current.get("downloads") or []:
        zip_url = dl.get("file", "")
        if zip_url:
            break
    if not zip_url:
        for var in _request(
            "GET",
            f"{base.rstrip('/')}/wp-json/wc/v3/products/{PRODUCT_ID}/variations?per_page=10",
            user,
            pwd,
        )[1]:
            if var.get("downloads"):
                zip_url = var["downloads"][0]["file"]
                break

    downloads = [{"id": "reponse-sc-dl", "name": DOWNLOAD_NAME, "file": zip_url}] if zip_url else []

    print("Mise à jour produit…")
    changelog = (
        "<h3>Version 1.0.1 — 28/05/2026</h3><ul>"
        "<li>Première version commerciale</li>"
        "<li>Génération de brouillon dans le fil messages clients PrestaShop 8+</li>"
        "<li>Support OpenAI, Anthropic, Gemini et Ochoa</li>"
        "<li>Contexte commande, produit, suivi colis et statut transporteur</li>"
        "<li>Prompt système et informations boutique configurables</li></ul>"
    )
    payload = {
        "name": PRODUCT_NAME,
        "slug": SLUG,
        "description": DESCRIPTION_HTML,
        "short_description": SHORT_DESCRIPTION,
        "images": [{"id": i} for i in image_ids],
        "tags": [
            {"name": "prestashop"},
            {"name": "module prestashop"},
            {"name": "service client"},
            {"name": "messages clients"},
            {"name": "rédaction automatique"},
        ],
        "meta_data": [
            {"key": "_yoast_wpseo_title", "value": YOAST_TITLE},
            {"key": "_yoast_wpseo_metadesc", "value": YOAST_METADESC},
            {"key": "_yoast_wpseo_focuskw", "value": YOAST_FOCUS},
            {"key": "cms", "value": ["PrestaShop"]},
            {"key": "versions", "value": "v8 à v9 toutes versions"},
            {"key": "langues_du_module", "value": ["FR", "EN"]},
            {"key": "derniere_mise_a_jour", "value": "20260528"},
            {"key": "version_du_module__theme", "value": "V1.0.1"},
            {"key": "niveau", "value": "Simple d'utilisation"},
            {"key": "documentation", "value": "1"},
            {"key": "changelog", "value": changelog},
            {"key": "url_demo", "value": "https://demo-prestashop.bnpj9981.odns.fr/backoffice"},
            {"key": "identifiant_demo", "value": "demo@demo.fr"},
            {"key": "mot_de_passe_demo", "value": "demodemo"},
            {
                "key": "infos_demo",
                "value": (
                    "Module installé sur la démo. Configuration : Modules → Brouillon réponses service client. "
                    "Ouvrez un fil messages clients (Service client → Messages) et cliquez sur « Générer la réponse »."
                ),
            },
        ],
    }
    if downloads:
        payload["downloads"] = downloads

    product = put_json(base, user, pwd, f"/wp-json/wc/v3/products/{PRODUCT_ID}", payload)

    print("Mise à jour des variations (nom du fichier téléchargeable)…")
    for var in _request(
        "GET",
        f"{base.rstrip('/')}/wp-json/wc/v3/products/{PRODUCT_ID}/variations?per_page=10",
        user,
        pwd,
    )[1]:
        if not var.get("downloads"):
            continue
        dl = var["downloads"]
        dl[0]["name"] = DOWNLOAD_NAME
        put_json(
            base,
            user,
            pwd,
            f"/wp-json/wc/v3/products/{PRODUCT_ID}/variations/{var['id']}",
            {"downloads": dl},
        )
        print(f"  variation {var['id']} OK")

    put_json(
        base,
        user,
        pwd,
        f"/wp-json/wp/v2/product/{PRODUCT_ID}",
        {"excerpt": SHORT_DESCRIPTION, "featured_media": featured_id},
    )

    print("\n--- Terminé ---")
    print(f"Nom   : {product['name']}")
    print(f"Slug  : {product['slug']}")
    print(f"Images: {len(product.get('images', []))}")
    print(f"Admin : {base}/wp-admin/post.php?post={PRODUCT_ID}&action=edit")
    print(f"Aperçu: {base}/produit/{SLUG}/?preview=true")


if __name__ == "__main__":
    main()
