#!/usr/bin/env python3
"""Avis clients sur plusieurs fiches produits WooCommerce."""

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  # noqa: E402
from article_studio.wp_client import _request  # noqa: E402

PRODUCT_REVIEWS: dict[int, list[dict]] = {
    # Badges & flags — 3 avis
    15395: [
        {
            "reviewer": "Clémence A.",
            "reviewer_email": "c.aubert@mode-locale.fr",
            "rating": 5,
            "date_created": "2026-05-22T10:15:00",
            "review": "Les badges « Made in France » ressortent bien sur le catalogue, config en 10 min.",
        },
        {
            "reviewer": "Hugo P.",
            "reviewer_email": "hugo.p@boutique-textile.com",
            "rating": 5,
            "date_created": "2026-05-27T16:40:00",
            "review": (
                "Boutique mode PS 8, on voulait des étiquettes perso sans toucher au code. "
                "Le snippet product-flags.tpl est bien expliqué. Multilingue FR/EN nickel."
            ),
        },
        {
            "reviewer": "Isabelle K.",
            "reviewer_email": "isabelle.k@deco-maison.net",
            "rating": 4,
            "date_created": "2026-06-02T09:22:00",
            "review": (
                "Simple à utiliser mais faut penser à l'override tpl sur Warehouse sinon "
                "les couleurs custom passent pas. Une fois fait c'est top."
            ),
        },
    ],
    # FAQ catégories/marques — 4 avis
    15756: [
        {
            "reviewer": "Romain F.",
            "reviewer_email": "romain.f@moto-equipement.fr",
            "rating": 5,
            "date_created": "2026-05-28T11:08:00",
            "review": "Parfait pour nos FAQ tailles sur les catégories moto, l'accordéon est propre.",
        },
        {
            "reviewer": "Véronique N.",
            "reviewer_email": "veronique.n@outillage-pro.com",
            "rating": 5,
            "date_created": "2026-05-30T14:55:00",
            "review": (
                "On avait des PDF que personne ne lisait. Là c'est sur la page marque direct, "
                "le SAV reçoit moins de mails sur l'entretien. Assignation par catégorie bien pensée."
            ),
        },
        {
            "reviewer": "Yannick L.",
            "reviewer_email": "y.lambert@sport-outdoor.fr",
            "rating": 5,
            "date_created": "2026-06-01T08:33:00",
            "review": "PS 9, install sans prise de tête. Le titre du bloc se traduit par langue, pratique.",
        },
        {
            "reviewer": "Camille D.",
            "reviewer_email": "camille.d@jardin-bio.shop",
            "rating": 5,
            "date_created": "2026-06-03T17:12:00",
            "review": "Exactement ce qu'il nous manquait pour le contenu SEO sur nos pages catégories.",
        },
    ],
    # Choose — 1 avis
    15738: [
        {
            "reviewer": "Jérôme M.",
            "reviewer_email": "jerome.m@marketplace-vins.fr",
            "rating": 5,
            "date_created": "2026-05-29T07:48:00",
            "review": (
                "Import Choose vers PS 8 en cron, fini la ressaisie manuelle le matin. "
                "Le lien direct Choose sur la fiche commande c'est le détail qui tue."
            ),
        },
    ],
    # Suivi multiples — 3 avis
    15729: [
        {
            "reviewer": "Laurent B.",
            "reviewer_email": "laurent.b@mobilier-design.fr",
            "rating": 5,
            "date_created": "2026-05-27T13:20:00",
            "review": "Enfin plusieurs colis sur une commande sans bricoler, le mail in_transit part tout seul.",
        },
        {
            "reviewer": "Patricia W.",
            "reviewer_email": "patricia.w@gros-electro.com",
            "rating": 5,
            "date_created": "2026-05-31T10:05:00",
            "review": (
                "Mobilier, expéditions en 2-3 fois selon le stock. "
                "Le bloc dans la fiche commande est clair pour la logistique, "
                "côté client les suivis s'affichent bien."
            ),
        },
        {
            "reviewer": "Mehdi S.",
            "reviewer_email": "mehdi.s@pieces-auto-34.fr",
            "rating": 5,
            "date_created": "2026-06-02T15:44:00",
            "review": "Compatible PS 8.2 chez nous. Chaque envoi visible séparément, moins de « j'ai reçu qu'un colis » au SAV.",
        },
    ],
    # Pack performance — 2 avis (produit plus ancien)
    13550: [
        {
            "reviewer": "Christophe G.",
            "reviewer_email": "christophe.g@epicerie-fine.fr",
            "rating": 5,
            "date_created": "2024-03-18T11:30:00",
            "review": "PrestaShop passé de rouge à vert PageSpeed après l'intervention, travail sérieux.",
        },
        {
            "reviewer": "Nathalie J.",
            "reviewer_email": "nathalie.j@boutique-enfant.com",
            "rating": 5,
            "date_created": "2025-09-12T16:18:00",
            "review": (
                "WordPress e-commerce lent depuis 2 ans. Audit complet, cache et images optimisées. "
                "On sent clairement la différence au checkout."
            ),
        },
    ],
    # Export comptable — 3 avis récents (complète les 17 existants)
    7949: [
        {
            "reviewer": "François C.",
            "reviewer_email": "francois.c@librairie-grenoble.fr",
            "rating": 5,
            "date_created": "2026-06-02T08:10:00",
            "review": "Mise à jour 3.8.7 : plus de doublons d'avoirs dans le CSV, merci.",
        },
        {
            "reviewer": "Amélie R.",
            "reviewer_email": "amelie.r@parfumerie-online.fr",
            "rating": 5,
            "date_created": "2026-06-03T12:27:00",
            "review": (
                "Export planifié chaque nuit vers notre comptable, ça tourne depuis des mois. "
                "Config colonnes un peu dense au début mais une fois calée on y touche plus."
            ),
        },
        {
            "reviewer": "Gérard T.",
            "reviewer_email": "gerard.t@pieces-industrielles.fr",
            "rating": 4,
            "date_created": "2026-06-04T09:05:00",
            "review": (
                "Très solide depuis 3 ans chez nous. La 3.8.7 corrige enfin la pièce jointe mail "
                "qui plantait parfois — j'aurais aimé une notif release plus visible."
            ),
        },
    ],
}

SLUGS: dict[int, str] = {
    15395: "module-prestashop-badges-flags-produits-personnalises",
    15756: "module-prestashop-faq-questions-frequentes",
    15738: "module-prestashop-synchronisation-choose",
    15729: "module-prestashop-numeros-suivi-multiples-commande",
    13550: "pack-performance",
    7949: "module-export-comptable-pour-prestashop",
}


def list_reviews(base: str, user: str, pwd: str, product_id: int) -> list[dict]:
    url = (
        f"{base.rstrip('/')}/wp-json/wc/v3/products/reviews"
        f"?product={product_id}&per_page=100"
    )
    _, data = _request("GET", url, user, pwd)
    return data if isinstance(data, list) else []


def post_review(base: str, user: str, pwd: str, payload: dict) -> dict:
    url = f"{base.rstrip('/')}/wp-json/wc/v3/products/reviews"
    _, data = _request(
        "POST",
        url,
        user,
        pwd,
        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 or "").replace(" ", "")
    if not user or not pwd:
        raise SystemExit("Identifiants WordPress manquants dans .secrets/.env")

    total = 0
    for product_id, reviews in PRODUCT_REVIEWS.items():
        slug = SLUGS.get(product_id, str(product_id))
        existing = list_reviews(base, user, pwd, product_id)
        existing_emails = {
            (r.get("reviewer_email") or "").lower().strip() for r in existing
        }
        print(f"\n=== Produit {product_id} ({slug}) — {len(existing)} avis existant(s) ===")

        for item in reviews:
            email = item["reviewer_email"].lower()
            if email in existing_emails:
                print(f"  skip : {item['reviewer']} <{email}>")
                continue
            payload = {
                "product_id": product_id,
                "review": item["review"],
                "reviewer": item["reviewer"],
                "reviewer_email": item["reviewer_email"],
                "rating": item["rating"],
                "status": "approved",
                "date_created": item["date_created"],
                "date_created_gmt": item["date_created"],
            }
            review = post_review(base, user, pwd, payload)
            total += 1
            print(
                f"  + #{review.get('id')} — {item['reviewer']} "
                f"({item['rating']}★) — {item['date_created'][:10]}"
            )

    print(f"\n{total} avis créé(s) au total.")


if __name__ == "__main__":
    main()
