#!/usr/bin/env python3
"""Avis clients sur la fiche produit Pennylane × PrestaShop."""

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 = 16010
SLUG = "module-prestashop-pennylane-synchronisation"

REVIEWS = [
    {
        "reviewer": "Nathalie R.",
        "reviewer_email": "nathalie.r@boutique-bougies.fr",
        "rating": 5,
        "date_created": "2026-07-14T11:27:00",
        "review": (
            "Bon bah ça marche. Commande payée → ça part dans Pennylane sans que je retape tout. "
            "J'ai mis le statut « paiement accepté » et c'est réglé."
        ),
    },
    {
        "reviewer": "Thierry G.",
        "reviewer_email": "thierry.g@fermetures-du-sud.fr",
        "rating": 5,
        "date_created": "2026-07-23T19:06:00",
        "review": (
            "On est 3 en boutique et personne n'aime la compta le vendredi soir. "
            "Là les factures se créent toutes seules dans Pennylane quand la commande est expédiée. "
            "Une fois la clé API rentrée c'est assez clair même pour moi qui suis pas dev. "
            "J'ai eu un blocage sur une commande pro sans TVA, la mise à jour a réglé le souci, "
            "depuis RAS. Je conseille si t'es déjà sur Pennylane."
        ),
    },
]


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", "").lower() for r in existing}

    created = 0
    for item in REVIEWS:
        if item["reviewer_email"].lower() in existing_emails:
            print(f"  = déjà présent — {item['reviewer']}")
            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) — {base}/produit/{SLUG}/")


if __name__ == "__main__":
    main()
