#!/usr/bin/env python3
"""Tambah tautan internal TSC: artikel klaster → beranda (jangkar 'dokter kulit Sidoarjo') dan halaman klaster.

Jalankan tanpa argumen = uji (tidak mengubah apa pun). Dengan --go = pasang.
Cadangan isi asli disimpan ke tsc_backup_tautan_internal.json sebelum perubahan.
"""
import base64, importlib.util, json, os, re, sys, time, urllib.request

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
spec = importlib.util.spec_from_file_location("cfg", f"{WS}/cfg_tsc.py")
m = importlib.util.module_from_spec(spec)
spec.loader.exec_module(m)
SITUS = "https://www.theskincodeclinic.com"
A = base64.b64encode(f"{m.CFG['user']}:{m.CFG['pass']}".encode()).decode()
H = {"Authorization": f"Basic {A}", "User-Agent": "Mozilla/5.0", "Content-Type": "application/json"}

HOME = SITUS + "/"
KECANTIKAN = SITUS + "/rekomendasi-6-klinik-kecantikan-di-krian-sidoarjo/"
ESTETIKA = SITUS + "/klinik-estetika-krian-layanan-lengkap/"
FACIAL = SITUS + "/facial-medis-di-krian-solusi-wajah-kusam/"
JERAWAT = SITUS + "/perawatan-jerawat-di-krian-oleh-dokter-spesialis/"


def l(u, a):
    return f'<a href="{u}">{a}</a>'


# paragraf penutup per artikel, ditulis satu per satu supaya tidak seragam
SISIPAN = {
    9102: f"""<p>Kalau kamu ingin melihat layanan lengkapnya dari dokter spesialis kulit dan kelamin, jadwal praktik serta daftar perawatan ada di {l(HOME, 'halaman The Skin Code Clinic')}. Untuk gambaran layanan estetika yang tersedia di Krian, lihat juga pembahasan {l(ESTETIKA, 'klinik estetika Krian')}.</p>""",
    9104: f"""<p>Selain membandingkan klinik, ada baiknya melihat langsung layanan dan jadwal praktiknya di {l(HOME, 'The Skin Code Clinic Krian Sidoarjo')}. Kalau yang dicari perawatan wajah rutin, simak juga {l(FACIAL, 'facial medis di Krian')}.</p>""",
    1713: f"""<p>Menentukan grade jerawat memang lebih akurat kalau diperiksa dokter. Jadwal dan lokasi praktiknya ada di {l(HOME, 'klinik kulit dan kelamin Krian Sidoarjo')}, dan pilihan penanganannya dijelaskan di {l(JERAWAT, 'solusi jerawat di Krian')}.</p>""",
    8831: f"""<p>Facial medis sebaiknya dilakukan berulang agar hasilnya bertahan. Jadwal praktik dan layanannya bisa dilihat di {l(HOME, 'dokter kulit di Sidoarjo')}, sementara pilihan perawatan wajah lain ada di {l(FACIAL, 'klinik facial Krian')}.</p>""",
    9061: f"""<p>Untuk daftar layanan estetika yang tersedia beserta jadwalnya, buka {l(HOME, 'The Skin Code Clinic')}. Kalau masih membandingkan tempat, panduan {l(KECANTIKAN, 'klinik kecantikan Krian Sidoarjo')} ini bisa jadi bahan pertimbangan.</p>""",
    9063: f"""<p>Jadwal facial medis dan konsultasi dokter kulit ada di {l(HOME, 'klinik kulit dan kelamin Krian Sidoarjo')}. Sebagai bahan pertimbangan memilih tempat, lihat juga daftar {l(KECANTIKAN, 'klinik kecantikan Krian Sidoarjo')}.</p>""",
    10162: f"""<p>Kalau kamu ingin langsung melihat jenis facial yang tersedia dan jadwalnya, buka {l(HOME, 'The Skin Code Clinic di Krian Sidoarjo')}. Perbandingan jenis perawatan wajahnya diuraikan di {l(FACIAL, 'facial medis di Krian')}.</p>""",
    10160: f"""<p>Sebagai pembanding, layanan dan jadwal praktik dokter kulit di Krian Sidoarjo bisa dilihat di {l(HOME, 'The Skin Code Clinic')}. Daftar klinik yang ada di sekitar Krian juga dirangkum di {l(KECANTIKAN, 'klinik kecantikan Krian Sidoarjo')}.</p>""",
    9051: f"""<p>Jadwal praktik, daftar layanan, dan lokasi kliniknya bisa dilihat di {l(HOME, 'dokter kulit di Sidoarjo')}. Untuk perawatan yang lebih berfokus pada penampilan, lihat juga {l(ESTETIKA, 'klinik estetika Krian')}.</p>""",
    8379: f"""<p>Tindakan penghilangan tahi lalat dilakukan dokter spesialis di klinik. Jadwal dan lokasinya ada di {l(HOME, 'The Skin Code Clinic Krian Sidoarjo')}. Kalau yang dipertimbangkan tindakan estetika lain, lihat {l(ESTETIKA, 'klinik estetika Krian')}.</p>""",
    8382: f"""<p>Prosedur ini termasuk tindakan dokter, jadi sebaiknya dipastikan dulu kliniknya. Jadwal praktik dan layanannya ada di {l(HOME, 'klinik kulit dan kelamin Krian Sidoarjo')}, dan pilihan klinik di sekitar Krian dirangkum di {l(KECANTIKAN, 'klinik kecantikan Krian Sidoarjo')}.</p>""",
    9251: f"""<p>Bekas jerawat biasanya perlu beberapa sesi sebelum terlihat memudar. Jadwal konsultasi dan layanannya ada di {l(HOME, 'dokter kulit di Sidoarjo')}, sedangkan pilihan penanganan jerawat aktif dibahas di {l(JERAWAT, 'solusi jerawat di Krian')}.</p>""",
    1601: f"""<p>Memilih antara keduanya sebaiknya berdasarkan kondisi kulit, dan itu perlu diperiksa dokter. Jadwal praktiknya ada di {l(HOME, 'The Skin Code Clinic Krian Sidoarjo')}, pilihan perawatan wajahnya ada di {l(FACIAL, 'facial medis di Krian')}.</p>""",
    1578: f"""<p>Perawatan jerawat sebaiknya dimulai dari pemeriksaan dokter, bukan dari mencoba produk satu per satu. Jadwal dan lokasinya ada di {l(HOME, 'klinik kulit dan kelamin Krian Sidoarjo')}, pilihan terapinya dijelaskan di {l(JERAWAT, 'solusi jerawat di Krian')}.</p>""",
    9065: f"""<p>Jadwal perawatan jerawat dan konsultasi dokter kulit ada di {l(HOME, 'The Skin Code Clinic Krian Sidoarjo')}. Untuk membandingkan tempat, daftar {l(KECANTIKAN, 'klinik kecantikan Krian Sidoarjo')} ini bisa membantu.</p>""",
    9053: f"""<p>Jadwal dan daftar perawatan wajah yang tersedia bisa dilihat di {l(HOME, 'dokter kulit di Sidoarjo')}. Kalau yang dicari perawatan wajah berbasis medis, baca juga {l(FACIAL, 'facial medis di Krian')}.</p>""",
    9069: f"""<p>Layanan, jadwal praktik, dan lokasi The Skin Code Clinic ada di {l(HOME, 'halaman utama klinik')}. Untuk melihat pilihan layanan estetika yang tersedia, buka {l(ESTETIKA, 'klinik estetika Krian')}.</p>""",
    9055: f"""<p>Sebelum memilih treatment, sebaiknya konsultasikan dulu kondisi kulitmu. Jadwal dan lokasinya ada di {l(HOME, 'The Skin Code Clinic Krian Sidoarjo')}, dan daftar klinik di sekitar Krian ada di {l(KECANTIKAN, 'klinik kecantikan Krian Sidoarjo')}.</p>""",
    9093: f"""<p>Jadwal praktik dokter dan daftar layanannya bisa dilihat di {l(HOME, 'klinik kulit dan kelamin Krian Sidoarjo')}. Untuk perawatan yang sifatnya estetika, lihat juga {l(ESTETIKA, 'klinik estetika Krian')}.</p>""",
    9100: f"""<p>Layanan lengkap dan jadwal praktiknya ada di {l(HOME, 'The Skin Code Clinic')}. Pembanding layanan estetika di Krian bisa dilihat di {l(ESTETIKA, 'klinik estetika Krian')}.</p>""",
}


def ambil(pid):
    u = f"{SITUS}/wp-json/wp/v2/posts/{pid}?context=edit&_fields=id,content,link,modified"
    return json.loads(urllib.request.urlopen(urllib.request.Request(u, headers=H), timeout=90).read())


def simpan(pid, isi):
    b = json.dumps({"content": isi}).encode()
    r = urllib.request.Request(f"{SITUS}/wp-json/wp/v2/posts/{pid}", data=b, headers=H, method="POST")
    return json.loads(urllib.request.urlopen(r, timeout=120).read())


GO = "--go" in sys.argv
cadangan = {}
siap = 0
for pid, tambahan in SISIPAN.items():
    x = ambil(pid)
    c = x["content"]["raw"]
    if HOME in c and tambahan[:60] in c:
        print(f"   #{pid} sudah pernah dipasang, lewati")
        continue
    # titik sisip: sebelum tombol WhatsApp
    pos = c.find('<p style="text-align:center')
    if pos == -1:
        pos = len(c)
    baru = c[:pos] + tambahan + "\n" + c[pos:]
    jumlah = len(re.findall(r"<a href=", tambahan))
    print(f"   #{pid} · {x['link'].replace(SITUS, '')[:52]:<54} +{jumlah} tautan")
    cadangan[str(pid)] = c
    siap += 1
    if GO:
        simpan(pid, baru)
        time.sleep(1)

if GO:
    with open(f"{WS}/tsc_backup_tautan_internal.json", "w") as f:
        json.dump(cadangan, f, ensure_ascii=False)
    print(f"\n✅ {siap} artikel dipasangi tautan · cadangan: tsc_backup_tautan_internal.json")
else:
    print(f"\n(uji) {siap} artikel siap dipasang. Jalankan dengan --go untuk memasang.")
