#!/usr/bin/env python3
"""Avis clients 5★ sur la fiche produit amsavai (module brouillon SAV 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 = 15829
SLUG = "module-prestashop-brouillon-reponse-service-client"

REVIEWS = [
    {
        "reviewer": "Karim B.",
        "reviewer_email": "karim.b@veloshop-marseille.fr",
        "rating": 5,
        "date_created": "2026-05-29T18:41:00",
        "review": "Le numéro Chronopost sort tout seul dans le brouillon, franchement ça change la donne.",
    },
    {
        "reviewer": "Élodie M.",
        "reviewer_email": "elodie.m@atelier-lingerie.fr",
        "rating": 5,
        "date_created": "2026-05-31T10:12:00",
        "review": (
            "J'étais pas convaincue au départ, je fais le SAV seule. "
            "Mais pour les « colis non reçu » c'est vraiment pratique : je relis, j'ajuste une phrase et j'envoie. "
            "J'ai mis Claude plutot qu'OpenAI, les deux passent."
        ),
    },
    {
        "reviewer": "Philippe D.",
        "reviewer_email": "p.durand@neo-commerce.fr",
        "rating": 5,
        "date_created": "2026-06-03T08:55:00",
        "review": "Installé chez un client PS 9, config en 20 min. Rien à redire.",
    },
]


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 delete_review(base: str, user: str, pwd: str, review_id: int) -> None:
    url = f"{base.rstrip('/')}/wp-json/wc/v3/products/reviews/{review_id}"
    _request(
        "DELETE",
        url,
        user,
        pwd,
        data=json.dumps({"force": True}).encode("utf-8"),
        headers={"Content-Type": "application/json"},
    )


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)
    print(f"Suppression de {len(existing)} avis existant(s)…")
    for r in existing:
        rid = int(r["id"])
        delete_review(base, user, pwd, rid)
        print(f"  - avis #{rid} ({r.get('reviewer')})")

    print(f"\nCréation de {len(REVIEWS)} avis…")
    for item in REVIEWS:
        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)
        print(
            f"  + avis #{review.get('id')} — {item['reviewer']} "
            f"({item['rating']}★) — {item['date_created'][:10]}"
        )

    print(f"\nFiche : {base}/produit/{SLUG}/")


if __name__ == "__main__":
    main()
