#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Bangun presentasi proyeksi sampai akhir 2026 (HTML → nanti jadi PDF).

Semua angka trafik dari GSC (28 hari terakhir yang saya punya) dan dari invoice TSLaw September.
Skenario diberi label jelas: mana data, mana asumsi.
"""
import json, os

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
OUT = f"{WS}/drafts/proyeksi_akhir_2026.html"

# --- data nyata: GSC 28 hari (13 Sep–10 Okt 2026) ---
KLIEN = [
    ("Kendangsari Hospital", 2472, 340966, 7.1, -12.6),
    ("Yasmanatura", 648, 5573, 4.8, +120.4),
    ("Surabaya Skin Centre", 648, 51432, 7.8, -9.0),
    ("StudioSoft", 46, 3708, 34.9, +31.4),
    ("DAS Bengkel", 42, 1204, 7.2, -48.1),
    ("The Skin Code Clinic", 33, 1647, 6.4, -32.7),
    ("EveryBe", 18, 341, 5.5, +80.0),
    ("TSLaw", 9, 338, 7.0, -25.0),
]
KLIK = sum(k for _, k, _, _, _ in KLIEN)
TAYANG = sum(t for _, _, t, _, _ in KLIEN)

# --- proyeksi trafik: tiga skenario, asumsi ditulis terbuka ---
SKENARIO = [("Data tetap (tanpa perubahan)", 0.0), ("Realistis (+5%/bulan)", 0.05),
            ("Optimis (+15%/bulan)", 0.15)]


def bulanan(klik28, laju, bulan):
    """Perkiraan klik per bulan ke depan dari laju pertumbuhan bulanan."""
    per_bulan = klik28 * 30 / 28
    hasil = []
    for i in range(bulan):
        hasil.append(round(per_bulan * ((1 + laju) ** i)))
    return hasil


BULAN = ["Oktober", "November", "Desember"]
proyeksi = []
for nama, laju in SKENARIO:
    seri = bulanan(KLIK, laju, 3)
    proyeksi.append({"nama": nama, "laju": f"{int(laju * 100)}%", "bulanan": seri, "total": sum(seri)})

# --- konsistensi kerja: kapasitas & jadwal ---
KONTEN = [
    ("Artikel StudioSoft", "1 artikel/hari sampai 26 Okt (12 artikel tersisa di antrean)", "±12 artikel"),
    ("Artikel TSC", "1 artikel/hari (antrean 15–20 Okt, lalu menyesuaikan keputusan Bos)", "±12 artikel"),
    ("Perbaikan TSLaw", "1 artikel/hari diperiksa & dirapikan (job harian)", "±78 artikel"),
    ("Posting sosial", "FB, LinkedIn, Threads, IG berjalan otomatis tiap hari", "±370 posting"),
    ("Ulasan & profil bisnis", "target 30–50 ulasan baru/bulan (TSC dulu)", "±90–150 ulasan"),
]

# --- omzet: dasar yang terbukti + skenario yang jelas labelnya ---
OMZET_TERBUKTI = [("TSLaw", 3000000, "invoice 104/INV/IX/2026, 1 Sep 2026 (Rp 3.000.000/bulan)")]
JML_KLIEN = 11
skenario_omzet = []
for fee in (1500000, 2500000, 3500000):
    per_bulan = JML_KLIEN * fee
    skenario_omzet.append({"fee": fee, "per_bulan": per_bulan,
                           "okt_des": per_bulan * 3})

html = f"""<!DOCTYPE html>
<html lang="id"><head><meta charset="utf-8"><title>Proyeksi hingga Akhir 2026 — StudioSoft</title>
<style>
@page {{ size: A4; margin: 0; }}
* {{ box-sizing: border-box; }}
body {{ font-family: "Poppins","DejaVu Sans",sans-serif; margin:0; color:#0b1f3a; }}
.slide {{ width:210mm; height:297mm; padding:22mm 18mm; page-break-after:always; position:relative; }}
.slide:last-child {{ page-break-after:auto; }}
h1 {{ font-size:30pt; margin:0 0 6mm; line-height:1.15; }}
h2 {{ font-size:19pt; margin:0 0 5mm; color:#0b1f3a; }}
h3 {{ font-size:12pt; margin:6mm 0 2mm; color:#2563eb; text-transform:uppercase; letter-spacing:.06em; }}
p, li, td, th {{ font-size:11pt; line-height:1.5; }}
.eyebrow {{ font-size:10pt; letter-spacing:.18em; text-transform:uppercase; color:#2563eb; font-weight:600; }}
.rule {{ height:8px; background:#2563eb; width:70mm; margin:0 0 8mm; }}
table {{ width:100%; border-collapse:collapse; margin-top:3mm; }}
th {{ text-align:left; background:#eff4ff; padding:2.5mm; font-size:10pt; }}
td {{ padding:2.5mm; border-bottom:1px solid #e3e9f2; }}
td.num, th.num {{ text-align:right; }}
.big {{ font-size:26pt; font-weight:700; }}
.note {{ font-size:9pt; color:#64748b; margin-top:4mm; }}
.kotak {{ background:#f7f9fd; border-left:4px solid #2563eb; padding:4mm 5mm; margin:4mm 0; }}
.kaki {{ position:absolute; bottom:12mm; left:18mm; right:18mm; font-size:9pt; color:#94a3b8;
         border-top:1px solid #e3e9f2; padding-top:3mm; }}
</style></head><body>

<section class="slide">
  <div class="eyebrow">StudioSoft · Proyeksi Oktober–Desember 2026</div>
  <h1>Proyeksi hingga akhir tahun</h1>
  <div class="rule"></div>
  <p>Disusun 14 Oktober 2026 dari data yang ada: Search Console 28 hari terakhir untuk delapan klien,
     antrean artikel yang sudah terjadwal di WordPress, jadwal posting sosial yang berjalan, dan satu
     invoice yang terbukti (TSLaw, September 2026).</p>
  <div class="kotak">
    <p style="margin:0"><strong>Yang perlu diputuskan lebih dulu:</strong> angka omzet bulanan klien
    selain TSLaw belum ada di catatan saya. Bagian omzet di slide 6 karena itu disusun sebagai skenario,
    bukan angka pasti. Kalau Anda kirim daftar fee per klien, angkanya bisa saya kunci dalam versi
    berikutnya.</p>
  </div>
  <div class="kaki">Halaman 1 · Basis data nyata, asumsi diberi label · StudioSoft</div>
</section>

<section class="slide">
  <h2>Posisi sekarang</h2>
  <p>Delapan klien yang terukur, 28 hari terakhir (13 September–10 Oktober 2026):</p>
  <table>
    <tr><th>Klien</th><th class="num">Klik</th><th class="num">Tayangan</th><th class="num">Posisi</th>
        <th class="num">Perubahan klik</th></tr>
"""

for nama, k, t, p, d in KLIEN:
    warna = "#b91c1c" if d < 0 else "#15803d"
    html += (f"    <tr><td>{nama}</td><td class='num'>{k:,}</td><td class='num'>{t:,}</td>"
             f"<td class='num'>{str(p).replace('.', ',')}</td>"
             f"<td class='num' style='color:{warna}'>{d:+.1f}%</td></tr>\n".replace(",", "."))

html += f"""    <tr><th>Total</th><th class="num">{KLIK:,}</th><th class="num">{TAYANG:,}</th>
        <th class="num">—</th><th class="num" style="color:#b91c1c">−2,6%</th></tr>
  </table>
  <h3>Bacaan singkat</h3>
  <ul>
    <li>Tayangan turun 7,2% tetapi perbandingan klik terhadap tayangan membaik dari 0,92% ke 0,97%.</li>
    <li>Yasmanatura dan EveryBe naik paling kencang; DAS dan TSC turun paling dalam, keduanya berkaitan
        dengan pemulihan setelah masalah suntikan dan penyempitan jangkauan.</li>
    <li>SLaw dan SS membaik di posisi meski kliknya masih kecil, tanda perbaikan teknis mulai bekerja.</li>
  </ul>
  <div class="kaki">Halaman 2 · Sumber: Google Search Console per klien</div>
</section>

<section class="slide">
  <h2>Kalau kita konsisten: apa yang dikerjakan sampai Desember</h2>
  <table>
    <tr><th>Jenis pekerjaan</th><th>Irama</th><th class="num">Perkiraan jumlah</th></tr>
"""

for a, b, c in KONTEN:
    html += f"    <tr><td><strong>{a}</strong></td><td>{b}</td><td class='num'>{c}</td></tr>\n"

html += f"""  </table>
  <div class="kotak"><p style="margin:0">Irama ini yang menentukan hasil. Satu artikel sehari yang
  berjalan tiga bulan lebih berdampak daripada dua puluh artikel dalam satu pekan lalu berhenti.</p></div>
  <div class="kaki">Halaman 3 · Kapasitas kerja harian yang sudah berjalan</div>
</section>

<section class="slide">
  <h2>Proyeksi trafik sampai akhir tahun</h2>
  <p>Basis: {KLIK:,} klik per 28 hari (setara ±{round(KLIK*30/28):,} klik per bulan) dari delapan klien
     terukur. Tiga skenario, asumsinya ditulis terbuka.</p>
  <table>
    <tr><th>Skenario</th><th class="num">Oktober</th><th class="num">November</th>
        <th class="num">Desember</th><th class="num">Total 3 bulan</th></tr>
"""

for p in proyeksi:
    html += (f"    <tr><td><strong>{p['nama']}</strong><br><span class='note'>asumsi {p['laju']} per bulan"
             f"</span></td><td class='num'>{p['bulanan'][0]:,}</td><td class='num'>{p['bulanan'][1]:,}</td>"
             f"<td class='num'>{p['bulanan'][2]:,}</td><td class='num'><strong>{p['total']:,}</strong></td>"
             f"</tr>\n".replace(",", "."))

html += f"""  </table>
  <div class="note">Skenario “realistis” mengasumsikan perbaikan yang sudah dipasang (pengindeksan,
  tautan internal, konsolidasi halaman, profil bisnis) bekerja seperti biasanya. Skenario “optimis”
  hanya tercapai kalau pekerjaan profil bisnis dan ulasan dijalankan penuh.</div>
  <div class="kaki">Halaman 4 · Proyeksi klik dari pencarian, delapan klien terukur</div>
</section>

<section class="slide">
  <h2>Yang paling menentukan kenaikan itu</h2>
  <table>
    <tr><th>Pengungkit</th><th>Kondisi sekarang</th><th>Kalau dijalankan</th></tr>
    <tr><td><strong>Ulasan profil bisnis</strong></td>
        <td>TSC 131 ulasan, pesaing seruko 858</td>
        <td>Kueri “terdekat” yang sekarang nol klik mulai menghasilkan kunjungan</td></tr>
    <tr><td><strong>Pengindeksan</strong></td>
        <td>4 halaman TSC & SS belum dikenal Google</td>
        <td>Halaman yang sudah ditulis akhirnya bisa ditemukan</td></tr>
    <tr><td><strong>Kerapian halaman</strong></td>
        <td>59 halaman klaster TSC, satu yang bekerja</td>
        <td>Sinyal tidak lagi saling memecah, halaman kuat naik</td></tr>
    <tr><td><strong>Kebersihan situs</strong></td>
        <td>158 tautan tak terlihat & suntikan di 3 situs</td>
        <td>Risiko turun, pemulihan DAS dan Kendangsari lebih cepat</td></tr>
  </table>
  <div class="kaki">Halaman 5 · Pengungkit dengan dampak terbesar menurut data</div>
</section>

<section class="slide">
  <h2>Omzet: dasar dan skenario</h2>
  <p>Jumlah klien aktif hari ini <strong>{JML_KLIEN} klien</strong>. Yang terbukti dari catatan:</p>
  <table>
    <tr><th>Klien</th><th class="num">Per bulan</th><th>Sumber</th></tr>
"""
for nama, nilai, dasar in OMZET_TERBUKTI:
    html += f"    <tr><td>{nama}</td><td class='num'>Rp {nilai:,}</td><td>{dasar}</td></tr>\n".replace(",", ".")

html += f"""    <tr><td colspan="2"><em>10 klien lain</em></td>
        <td><em>belum ada angka di catatan saya — perlu Anda kirim</em></td></tr>
  </table>
  <h3>Kalau fee rata-rata per klien</h3>
  <table>
    <tr><th>Fee rata-rata</th><th class="num">Per bulan ({JML_KLIEN} klien)</th><th class="num">Oktober–Desember</th></tr>
"""
for s in skenario_omzet:
    html += (f"    <tr><td>Rp {s['fee']:,}</td><td class='num'>Rp {s['per_bulan']:,}</td>"
             f"<td class='num'>Rp {s['okt_des']:,}</td></tr>\n".replace(",", "."))

html += f"""  </table>
  <div class="note">Tabel di atas <strong>ilustrasi aritmatika, bukan data</strong>: hasilnya berubah
  begitu angka fee sebenarnya dimasukkan. Tujuannya menunjukkan bentuk proyeksinya, bukan menebak
  penghasilan Anda.</div>
  <div class="kaki">Halaman 6 · Angka omzet perlu dikunci bersama pemilik</div>
</section>

<section class="slide">
  <h2>Risiko yang bisa menggeser proyeksi</h2>
  <ul>
    <li><strong>Pekerjaan berhenti di tengah.</strong> Proyeksi realistis mengandaikan irama artikel dan
        perbaikan jalan terus; berhenti satu bulan menunda hasil sekitar satu kuartal.</li>
    <li><strong>Pemulihan DAS dan Kendangsari.</strong> Keduanya masih membawa bekas suntikan; selama
        belum dibersihkan penuh, angka tayangannya sulit kembali.</li>
    <li><strong>Ulasan tidak jalan.</strong> Pengungkit terbesar pada kueri lokal butuh keterlibatan
        staf klinik, bukan pekerjaan saya.</li>
    <li><strong>Musim akhir tahun.</strong> Desember biasanya naik untuk layanan konsumen, tetapi turun
        untuk layanan bisnis seperti hukum dan agensi.</li>
  </ul>
  <div class="kaki">Halaman 7 · Risiko dan penjaganya</div>
</section>

<section class="slide">
  <h2>Yang perlu diputuskan</h2>
  <table>
    <tr><th>Hal</th><th>Keputusan</th></tr>
    <tr><td>Angka fee per klien</td><td>kirim daftarnya, supaya omzet bisa dikunci</td></tr>
    <tr><td>Irama artikel setelah 26 Oktober</td><td>dilanjut, dijeda, atau dikurangi</td></tr>
    <tr><td>Ulasan profil bisnis TSC</td><td>siapa yang menjalankan: staf klinik atau pihak lain</td></tr>
    <tr><td>Pembersihan sisa suntikan</td><td>DAS dan Kendangsari, butuh akses berkas</td></tr>
  </table>
  <div class="kotak"><p style="margin:0">Kesimpulannya: dengan irama yang sekarang berjalan, trafik
  delapan klien terukur bergerak antara datar dan naik 15% per bulan. Omzet bergantung pada jumlah klien
  dan besaran fee, jadi bagian itu baru bisa disimpulkan setelah angkanya dikirim.</p></div>
  <div class="kaki">Halaman 8 · Ringkasan keputusan</div>
</section>

</body></html>
"""

open(OUT, "w").write(html)
print(f"HTML: {OUT} ({len(html)} char)")
print(f"basis klik 28 hari: {KLIK} · tayangan: {TAYANG}")
for p in proyeksi:
    print(f"  {p['nama']:<32} {p['bulanan']} total {p['total']}")
