#!/usr/bin/env python3
"""Met à jour la fiche produit badges/flags (id 15395) : nom SEO, textes, images."""

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 = 15395
ASSETS = ROOT / "exports" / "amflags-product"

PRODUCT_NAME = "Module PrestaShop badges et flags produits personnalisés"
SLUG = "module-prestashop-badges-flags-produits-personnalises"

SHORT_DESCRIPTION = (
    "Créez des badges et flags produits sur mesure (texte multilingue, couleurs personnalisables) "
    "et assignez-les à vos fiches produits. Affichage automatique sur les miniatures du catalogue."
)

DESCRIPTION_HTML = """<h2>Valorisez votre catalogue avec des badges et flags produits 100 % personnalisés</h2>
<p>Vous souhaitez mettre en avant vos best-sellers, nouveautés, promotions ou arguments de vente directement sur les miniatures produits ? Ce module PrestaShop répond à ce besoin.</p>
<p>Ce module de badges et flags produits est simple à prendre en main : aucune compétence technique requise pour créer vos étiquettes et les associer à vos produits.</p>
<p>La configuration initiale prend quelques minutes : créez vos badges, choisissez les couleurs, puis cochez-les sur chaque fiche produit.</p>

<h2>Gestionnaire de badges et flags professionnel</h2>
<p>Vous pouvez créer et gérer autant de badges que nécessaire depuis le back-office :</p>
<ul>
<li>titres <strong>multilingues</strong> pour chaque langue active de la boutique,</li>
<li>couleur du texte et couleur de fond via sélecteur visuel,</li>
<li>ordre d'affichage configurable (champ position),</li>
<li>aperçu en temps réel dans l'interface d'administration,</li>
<li>assignation multiple par produit (plusieurs badges par fiche),</li>
<li>intégration native au système de flags PrestaShop (hook <code>actionProductFlagsModifier</code>).</li>
</ul>

<h2>Affichage catalogue optimisé</h2>
<p>Les badges et flags s'affichent automatiquement sur les <strong>miniatures produits</strong> (listes catégories, grilles, page d'accueil) aux côtés des labels natifs (promo, nouveau, pack…).</p>
<p>Idéal pour le merchandising visuel : mode, déco, alimentaire, marketplace — toute boutique voulant structurer ses messages sans modifier le code.</p>

<h2>Performances et compatibilité</h2>
<ul>
<li>cache par requête pour limiter les requêtes SQL,</li>
<li>requêtes groupées sur les listes multi-produits,</li>
<li>fallback de langue si une traduction manque,</li>
<li>compatible PrestaShop <strong>1.7 à 8</strong> (toutes versions mineures),</li>
<li>installation plug &amp; play : tables créées automatiquement à l'installation.</li>
</ul>

<h2>Snippet thème fourni</h2>
<p>Pour afficher les couleurs personnalisées sur tous les thèmes, un micro-override du template <code>product-flags.tpl</code> est documenté (ajout de l'attribut <code>style</code> sur le &lt;li&gt; du flag). Indispensable sur Classic et Warehouse.</p>

<h2>Cas d'usage</h2>
<ul>
<li>« Best-seller », « Exclusivité web », « -30 % »</li>
<li>« Made in France », « Éco-responsable », « Bio »</li>
<li>« Collection été », « Précommande », « Stock limité »</li>
</ul>

<h2>Conclusion</h2>
<p>Ce module de badges et flags produits vous fait gagner du temps sur le merchandising catalogue : étiquettes visuelles, multilingues et personnalisables, sans développement spécifique.</p>
<p>Installation en un clic, interface intuitive, et livraison immédiate du fichier ZIP après achat.</p>"""

YOAST_TITLE = "Module PrestaShop badges et flags produits - Étiquettes multilingues"
YOAST_METADESC = (
    "Module PrestaShop pour créer des badges et flags produits personnalisés (multilingue, couleurs). "
    "Affichage sur miniatures catalogue. Compatible PS 1.7 à 8."
)
YOAST_FOCUS = "Module PrestaShop badges produits"

IMAGE_FILES = [
    ("product-badges-featured.png", "Module PrestaShop badges et flags produits personnalisés", True),
    ("product-badges-admin.png", "Back-office PrestaShop - gestion des badges et flags produits", False),
    ("product-badges-frontend.png", "Front-office - badges et flags sur miniatures produits", False),
    ("product-badges-assignment.png", "Assignation des badges et flags sur fiche produit", False),
]

DOWNLOAD_NAME = "module-badges-flags-produits-prestashop-1.0.0"


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:
        media = upload_media(base, user, pwd, ASSETS / filename, 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 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": "badges-dl", "name": DOWNLOAD_NAME, "file": zip_url}] if zip_url else []

    print("Mise à jour produit…")
    payload = {
        "name": PRODUCT_NAME,
        "slug": SLUG,
        "description": DESCRIPTION_HTML,
        "short_description": SHORT_DESCRIPTION,
        "images": [{"id": i} for i in image_ids],
        "meta_data": [
            {"key": "_yoast_wpseo_title", "value": YOAST_TITLE},
            {"key": "_yoast_wpseo_metadesc", "value": YOAST_METADESC},
            {"key": "_yoast_wpseo_focuskw", "value": YOAST_FOCUS},
        ],
    }
    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()
