#!/usr/bin/env python3
"""Avis clients sur la fiche produit am-seo-links (maillage interne WordPress)."""

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_ID = 15815
SLUG = "plugin-wordpress-liens-automatiques-seo-maillage-interne"

REVIEWS = [
    {
        "reviewer": "Sandrine T.",
        "reviewer_email": "sandrine.t@blog-deco-nantes.fr",
        "rating": 5,
        "date_created": "2026-05-28T11:23:00",
        "review": "L'export JSON des règles m'a sauvé en migration staging → prod, nickel.",
    },
    {
        "reviewer": "Lucas R.",
        "reviewer_email": "lucas.r@agence-web-lyon.fr",
        "rating": 4,
        "date_created": "2026-05-30T15:47:00",
        "review": (
            "Prise en main pas évidente les premières heures, surtout les priorités quand "
            "plusieurs règles se marchent dessus. Mais une fois calé sur notre magazine "
            "(450 articles), le maillage se fait tout seul — outil clairement très puissant."
        ),
    },
    {
        "reviewer": "Antoine G.",
        "reviewer_email": "antoine.g@cuisine-maison.fr",
        "rating": 5,
        "date_created": "2026-06-01T09:08:00",
        "review": (
            "Blog cuisine, des années d'articles à rattraper à la main avant. "
            "L'alerte sur-optimisation m'a évité de sur-linker mes fiches recettes. "
            "La prévisualisation dans l'éditeur c'est ce que j'utilise le plus."
        ),
    },
    {
        "reviewer": "Marine V.",
        "reviewer_email": "marine.v@studio-seo.fr",
        "rating": 5,
        "date_created": "2026-06-03T14:31:00",
        "review": "Déployé chez 2 clients corporate, le support champs ACF est un vrai plus. Le journal des liens rassure quand le client demande pourquoi telle ancre a changé.",
    },
]


def list_reviews(base: str, user: str, pwd: str) -> 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")

    existing = list_reviews(base, user, pwd)
    existing_emails = {
        (r.get("reviewer_email") or "").lower().strip() for r in existing
    }
    print(f"Avis existants sur le produit {PRODUCT_ID} : {len(existing)}")

    created = 0
    for item in REVIEWS:
        email = item["reviewer_email"].lower()
        if email in existing_emails:
            print(f"  skip (déjà présent) : {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)
        created += 1
        print(
            f"  + avis #{review.get('id')} — {item['reviewer']} "
            f"({item['rating']}★) — {item['date_created'][:10]}"
        )

    print(f"\n{created} avis créé(s).")
    print(f"Fiche : {base}/produit/{SLUG}/")


if __name__ == "__main__":
    main()
