#!/usr/bin/env python3
"""Ping IndexNow + touche les landing pages pour accélérer l'indexation GSC."""

from __future__ import annotations

import json
import sys
import urllib.error
import urllib.request
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

INDEXNOW_KEY = "5f8e4b8b35b143b988c607967725f4b9"
HOST = "www.arnaud-merigeau.fr"

URLS = [
    "https://www.arnaud-merigeau.fr/freelance-prestashop/",
    "https://www.arnaud-merigeau.fr/freelance-wordpress/",
    "https://www.arnaud-merigeau.fr/freelance-seo/",
    "https://www.arnaud-merigeau.fr/freelance-woocommerce/",
    "https://www.arnaud-merigeau.fr/freelance-prestashop-bordeaux/",
    "https://www.arnaud-merigeau.fr/freelance-prestashop-paris/",
    "https://www.arnaud-merigeau.fr/freelance-prestashop-lyon/",
    "https://www.arnaud-merigeau.fr/freelance-prestashop-marseille/",
    "https://www.arnaud-merigeau.fr/freelance-wordpress-bordeaux/",
    "https://www.arnaud-merigeau.fr/freelance-wordpress-paris/",
    "https://www.arnaud-merigeau.fr/freelance-wordpress-lyon/",
    "https://www.arnaud-merigeau.fr/freelance-wordpress-marseille/",
]


def ping_indexnow(urls: list[str]) -> None:
    payload = {
        "host": HOST,
        "key": INDEXNOW_KEY,
        "keyLocation": f"https://{HOST}/{INDEXNOW_KEY}.txt",
        "urlList": urls,
    }
    data = json.dumps(payload).encode("utf-8")
    req = urllib.request.Request(
        "https://api.indexnow.org/indexnow",
        data=data,
        headers={"Content-Type": "application/json; charset=utf-8"},
        method="POST",
    )
    try:
        with urllib.request.urlopen(req, timeout=30) as resp:
            print(f"IndexNow: HTTP {resp.status} ({len(urls)} URLs)")
    except urllib.error.HTTPError as e:
        body = e.read().decode(errors="replace")
        print(f"IndexNow: HTTP {e.code} — {body[:200]}")


def touch_page(base_url: str, user: str, password: str, slug: str) -> None:
    lookup = f"{base_url.rstrip('/')}/wp-json/wp/v2/pages?slug={slug}"
    _, pages = _request("GET", lookup, user, password)
    if not pages:
        print(f"  skip {slug} (introuvable)")
        return
    page_id = pages[0]["id"]
    url = f"{base_url.rstrip('/')}/wp-json/wp/v2/pages/{page_id}"
    _request(
        "POST",
        url,
        user,
        password,
        data=json.dumps({"meta": {"_gsc_touch": "1"}}).encode("utf-8"),
        headers={"Content-Type": "application/json"},
    )
    print(f"  touch {slug} (ID {page_id})")


def main() -> int:
    cfg = load_config()
    ping_indexnow(URLS)

    if cfg.wp_user and cfg.wp_application_password:
        print("Touch pages WordPress (IndexNow auto-submit)…")
        for url in URLS:
            slug = url.rstrip("/").split("/")[-1]
            touch_page(cfg.wp_base_url, cfg.wp_user, cfg.wp_application_password, slug)

    print("Terminé.")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
