#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Tautkan 7 halaman lama yang berebut «jasa seo surabaya» ke halaman kanonik /jasa-seo-surabaya/.

Pakai: python3 ss_tautkan_jasa_seo.py         (uji)
       python3 ss_tautkan_jasa_seo.py --go    (kerjakan)
"""
import base64, json, re, sys, time, urllib.request

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
S = "https://studiosoft.id"
KANONIK = "https://studiosoft.id/jasa-seo-surabaya/"
H = {"Authorization": "Basic " + base64.b64encode(b"bambangbot:q26r RePo BVy6 pwU2 F3z7 ouyl").decode(),
     "User-Agent": "Mozilla/5.0", "Content-Type": "application/json"}
GO = "--go" in sys.argv

# slug → kalimat tautan (dibuat beda supaya tidak seragam)
SUMBER = {
    "7-jasa-seo-terbaik-di-surabaya-untuk-naikkan-ranking-website-ke-halaman-satu-google":
        "Kalau Anda ingin tahu pekerjaan apa yang sebenarnya masuk lingkup bulanan, lihat {a} yang kami kerjakan sendiri.",
    "5-jasa-seo-surabaya-terbaik-untuk-bantu-bisnis-kecil-tumbuh-cepat":
        "Sebagai pembanding, gambaran {a} — lingkup kerja, cara mengukur, dan kapan sebaiknya berhenti — bisa dibaca di situ.",
    "butuh-traffic-organik-gunakan-layanan-jasa-seo-surabaya-yang-terbukti-efektif":
        "Kalau yang dicari bukan daftar melainkan penyedia, mulailah dari {a}.",
    "1-jasa-seo-surabaya-bawa-website-anda-ke-puncak-google":
        "Untuk melihat cara kerja kami sendiri, termasuk laporan bulanannya, ada di {a}.",
    "jasa-seo-surabaya-terbaik-untuk-naikkan-ranking-website-di-google":
        "Bandingkan dulu dengan {a}: di sana dijelaskan apa yang dikerjakan tiap bulan, bukan hanya janji.",
    "cara-memilih-jasa-seo-surabaya":
        "Setelah tahu kriterianya, lihat {a} sebagai contoh penerapannya.",
    "6-strategi-jasa-seo-lokal-surabaya-terbaik-ala-studiosoft-yang-naikkan-traffic-3x-lipat":
        "Penerapan strategi ini pada layanan kami dijelaskan di {a}.",
    "apa-itu-jasa-seo-5-manfaat-menggunakan-layanan-ini-di-surabaya":
        "Kalau ingin melihat bentuk nyatanya, lingkup {a} kami uraikan lengkap.",
}


def rest(p, method="GET", data=None):
    body = json.dumps(data).encode() if data is not None else None
    r = urllib.request.Request(S + p, data=body, headers=H, method=method)
    with urllib.request.urlopen(r, timeout=180) as x:
        return json.loads(x.read())


cadangan, total = {}, 0
for slug, kalimat in SUMBER.items():
    try:
        d = rest(f"/wp-json/wp/v2/posts?slug={slug}&status=any&context=edit&_fields=id,slug,status,content,title")
    except Exception as e:
        print(f"   {slug[:44]}: gagal ambil ({str(e)[:40]})")
        continue
    if not isinstance(d, list) or not d:
        print(f"   {slug[:44]}: TIDAK DITEMUKAN")
        continue
    x = d[0]
    isi = x["content"]["raw"]
    if KANONIK in isi:
        print(f"   #{x['id']} {slug[:40]:<42} sudah tertaut, dilewati")
        continue
    a = '<a href="' + KANONIK + '">jasa SEO Surabaya</a>'
    tambahan = "<p>" + kalimat.format(a=a) + "</p>"
    pos = isi.find('<p style="text-align:center')
    baru = isi[:pos] + tambahan + "\n" + isi[pos:] if pos != -1 else isi.rstrip() + "\n" + tambahan
    total += 1
    print(f"   #{x['id']} {slug[:40]:<42} +1 tautan ke kanonik")
    cadangan[str(x["id"])] = isi
    if GO:
        try:
            rest(f"/wp-json/wp/v2/posts/{x['id']}", "POST", {"content": baru})
        except Exception as e:
            print(f"        gagal simpan: {str(e)[:60]}")
        time.sleep(0.6)

if GO:
    json.dump(cadangan, open(f"{WS}/ss_backup_tautan_kanonik.json", "w"), ensure_ascii=False)
    print(f"\n✅ {total} halaman ditautkan ke kanonik · cadangan: ss_backup_tautan_kanonik.json")
else:
    print(f"\n(uji) {total} halaman siap ditautkan. Pakai --go untuk mengerjakan.")
