#!/usr/bin/env python3
"""DAS — konsolidasi klaster Lexus.

Kanonik : #5684 /bengkel-spesialis-lexus-di-surabaya (419 tayangan, 33 klik)
Gabung  : #6705 (398 kata, 169 tayangan) dan #5705 Bengkel AC Lexus (381 kata, 3 tayangan)
"""
import base64, html, importlib.util, json, os, re, sys, time, urllib.error, urllib.request

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
BACKUP = f"{WS}/das_konsolidasi_backup"
os.makedirs(BACKUP, exist_ok=True)

spec = importlib.util.spec_from_file_location("cfg", f"{WS}/cfg_das.py")
m = importlib.util.module_from_spec(spec)
spec.loader.exec_module(m)
CFG = m.CFG
DOM = CFG["domain"]
AUTH = base64.b64encode(f"{CFG['user']}:{CFG['pass']}".encode()).decode()
UA = {"User-Agent": "Mozilla/5.0"}

KANONIK = 5684
GABUNG = [6705, 5705]

TAMBAHAN = """
<h2>Servis AC Lexus: Bagian yang Sering Terlambat Ditangani</h2>
<p>AC jarang dianggap mendesak sampai kabin mulai terasa hangat di siang hari. Padahal beberapa
gejala awal sudah bisa dikenali jauh sebelum itu: udara dingin hanya keluar di satu sisi, kabin
berbau apek saat AC baru dinyalakan, atau terdengar bunyi halus dari balik dashboard.</p>
<p>Pekerjaan yang biasanya diperlukan: pemeriksaan tekanan dan isi freon, pembersihan evaporator
dan saluran udara, pengecekan kompresor serta kopling magnet, penggantian filter kabin, dan
pemeriksaan kebocoran di jalur pipa. Untuk mobil premium seperti Lexus, pembersihan yang tidak rapi
justru bisa memindahkan bau ke seluruh kabin, jadi pengerjaannya perlu dilakukan di tempat yang
terbiasa menangani interior kelas ini.</p>

<h2>Mengapa Servis Lexus Sebaiknya Tidak Ditangani Sembarang Bengkel</h2>
<p>Lexus memakai sistem elektronik yang saling terhubung dengan banyak modul. Keluhan yang
terdengar sederhana, misalnya lampu peringatan yang menyala, sering tidak bisa disimpulkan tanpa
membaca data dari modul terkait.</p>
<p>Ada tiga hal yang membedakan penanganan mobil ini. Pertama, alat diagnostik yang mampu membaca
modul Lexus, bukan hanya mesin secara umum. Kedua, kehati-hatian saat membongkar komponen interior
dan panel mesin yang harganya tidak murah. Ketiga, kejelasan mana pekerjaan yang memang perlu
dilakukan sekarang dan mana yang masih bisa dipantau.</p>

<h2>Jadwal Perawatan Lexus yang Kami Pakai sebagai Patokan</h2>
<ul>
<li><strong>Setiap 10.000 km:</strong> ganti oli mesin dan filter oli, periksa rem, ban, dan cairan
pendingin.</li>
<li><strong>Setiap 20.000 sampai 30.000 km:</strong> filter udara dan filter kabin, pemeriksaan
busi, serta pengecekan kondisi minyak rem.</li>
<li><strong>Setiap 40.000 km ke atas:</strong> pemeriksaan menyeluruh untuk kaki-kaki, sistem
pendingin, dan penghuni hibrida seperti baterai serta inverter kalau mobilnya tipe hybrid.</li>
<li><strong>Setahun sekali:</strong> pemeriksaan AC dan pembersihan saluran udara, terutama kalau
mobil sering dipakai di jalanan berdebu.</li>
</ul>

<h2>Untuk Mobil Hibrida</h2>
<p>Komponen hibrida menambah beberapa pemeriksaan, bukan menggantikan yang sudah ada. Oli mesin
tetap diganti sesuai jarak tempuh, sementara baterai traksi, inverter, dan sistem pendinginnya
diperiksa terpisah. Kami juga memantau kesehatan baterai supaya penurunannya terlihat lebih awal,
bukan setelah muncul keluhan.</p>

<h2>Yang Sebaiknya Anda Siapkan Sebelum Menyerahkan Mobil</h2>
<ul>
<li>Catatan keluhan sedetail mungkin: kapan muncul, pada kecepatan berapa, dan apakah berulang.</li>
<li>Riwayat servis sebelumnya, termasuk jenis oli dan suku cadang yang dipakai.</li>
<li>Informasi garansi, kalau ada komponen yang masih dalam masa tanggungan.</li>
<li>Perkiraan waktu mobil bisa ditinggal, supaya pekerjaan bisa disusun sesuai kebutuhan Anda.</li>
</ul>

<p><span style="font-weight:bold;">Baca juga:</span>
<a href="https://dasindonesia.com/bengkel-mobil-hybrid-terbaik-di-surabaya/">penanganan mobil hybrid di Surabaya</a>
dan
<a href="https://dasindonesia.com/bengkel-spesialis-matic-surabaya/">bengkel spesialis matic Surabaya</a>,
dua pekerjaan yang paling sering berjalan berdampingan dengan perawatan Lexus.</p>
"""


def rest(path, method="GET", data=None):
    h = {"Authorization": f"Basic {AUTH}", **UA}
    body = None
    if data is not None:
        body = json.dumps(data).encode()
        h["Content-Type"] = "application/json"
    r = urllib.request.Request(f"https://{DOM}{path}", data=body, headers=h, method=method)
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=180) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            return e.code, e.read().decode()[:250]
        except Exception:
            time.sleep(4)
    return 0, "gagal"


st, kan = rest(f"/wp-json/wp/v2/posts/{KANONIK}?context=edit&_fields=id,slug,title,content,link")
if not isinstance(kan, dict):
    print("❌ gagal baca kanonik:", st, str(kan)[:120])
    sys.exit(1)
raw = kan["content"]["raw"]
open(f"{BACKUP}/post_{KANONIK}_sebelum.txt", "w").write(raw)
slug_kan = kan["slug"]

info = []
for gid in GABUNG:
    _, g = rest(f"/wp-json/wp/v2/posts/{gid}?context=edit&_fields=id,slug,title,content,meta,link")
    if isinstance(g, dict):
        open(f"{BACKUP}/post_{gid}_sebelum.txt", "w").write(g["content"]["raw"])
        info.append({"id": gid, "slug": g["slug"], "judul": html.unescape(g["title"]["raw"]),
                     "kata": len(html.unescape(re.sub(r"<[^>]+>", " ", g["content"]["raw"])).split())})

kata_lama = len(html.unescape(re.sub(r"<[^>]+>", " ", raw)).split())
isi_baru = raw.rstrip() + "\n" + TAMBAHAN
kata_baru = len(html.unescape(re.sub(r"<[^>]+>", " ", isi_baru)).split())
print(f"kanonik #{KANONIK} «{html.unescape(kan['title']['raw'])}» → panjang {kata_lama} → {kata_baru} kata")
for x in info:
    print(f"  gabung #{x['id']} «{x['judul'][:70]}» ({x['kata']} kata)")

if "--go" not in sys.argv:
    print("\n(dry run — pakai --go)")
    sys.exit(0)

st2, _ = rest(f"/wp-json/wp/v2/posts/{KANONIK}", "POST", {"content": isi_baru})
time.sleep(2)
_, cek = rest(f"/wp-json/wp/v2/posts/{KANONIK}?context=edit&_fields=content")
raw2 = cek["content"]["raw"]
print(f"\n  #{KANONIK}: HTTP {st2} | bagian baru {'masuk' if 'Servis AC Lexus' in raw2 else 'TIDAK masuk'}"
      f" | {len(html.unescape(re.sub(r'<[^>]+>', ' ', raw2)).split())} kata")

for x in info:
    st3, _ = rest(f"/wp-json/wp/v2/posts/{x['id']}", "POST", {"status": "draft"})
    time.sleep(1)
    _, c2 = rest(f"/wp-json/wp/v2/posts/{x['id']}?context=edit&_fields=status")
    print(f"  #{x['id']}: HTTP {st3} | status {c2.get('status')}")

print("\n  pengalihan 301 yang perlu Bos pasang:")
for x in info:
    print(f"    /{x['slug']}/ → /{slug_kan}/")
