#!/usr/bin/env python3
"""Uji 21 hari @ukyhandoko: geser slot 23:00 → 09:30 WIB dan ganti caption ke gaya kasus nyata.
Volume tetap 6 post/hari — yang berubah hanya jam tayang dan gaya caption.
Pakai --apply untuk menerapkan."""
import json, sys
from datetime import datetime, timedelta, timezone

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
sys.path.insert(0, WS)
from repliz_client import get_client, ACC          # noqa: E402

client = get_client()

CAPTION = [
    "Klien minta turunkan biaya iklan 30%, tapi produknya belum punya pembeda. Kalian mulai dari mana?",
    "Ada klien yang mau langsung jualan lewat iklan, padahal situsnya belum punya satu pun testimoni. Bereskan dulu, atau tetap jalan?",
    "Saya selalu berdebat soal ini: naikkan jumlah konten, atau naikkan mutunya. Tim kalian condong ke mana?",
    "Klien minta hasil terukur di bulan pertama, padahal semuanya masih dari nol. Kalian menjanjikan apa?",
    "Biaya iklan naik tiap kuartal, tapi konversinya tetap. Kalian memeriksa bagian mana dulu?",
    "Situs klien cepat dan rapi, tapi tidak ada yang menghubungi. Menurut kalian masalahnya di mana?",
    "Saya pernah menolak klien karena briefnya tidak masuk akal secara bisnis. Kalian pernah melakukan hal yang sama?",
    "Tim kecil, permintaan banyak. Kalian menolak pekerjaan, atau menambah orang dulu?",
    "Kalau anggarannya cuma cukup untuk satu hal, konten atau iklan, kalian pilih mana? Saya penasaran alasannya.",
    "Laporan bulanan: menurut pengalaman kalian, berapa angka yang benar-benar dibaca klien sampai habis?",
    "Klien minta gaya bahasa santai, padahal industrinya serius. Ikut kemauan klien, atau mempertahankan gaya sendiri?",
    "Konten yang paling banyak dibaca justru yang paling murah dibuat. Kalian punya contoh serupa?",
    "Ada klien menuntut peringkat nomor satu di kota besar dengan anggaran seadanya. Kalian menyampaikannya bagaimana?",
    "Setelah bertahun-tahun kerja, saya baru sadar yang membuat klien bertahan bukan hasilnya, tapi cara kita melaporkannya. Setuju?",
    "Saya lebih banyak belajar dari proyek yang gagal daripada yang berhasil. Kalian menyimpan catatan kegagalan?",
    "Kalau harus memilih klien besar tapi sulit, atau kecil tapi lancar, kalian pilih mana?",
    "Klien bertanya kenapa kompetitornya bisa viral padahal produknya biasa. Kalian menjawab apa?",
    "Saya masih bingung membedakan 'butuh iklan' dan 'butuh produk yang lebih jelas'. Kalian punya cara membedakannya?",
    "Ketika klien ingin merek baru padahal pelanggannya belum mengenal merek lama, kalian menyarankan apa?",
    "Berapa lama biasanya kalian beri waktu sebelum menyimpulkan sebuah strategi berhasil atau tidak?",
    "Satu hal yang paling sering luput ketika klien mengurus pemasaran sendiri, menurut kalian apa?",
]

JAM_BARU_WIB, JAM_LAMA_WIB = 9, 23      # geser 23:00 → 09:30
MULAI = datetime.now(timezone.utc).date()
AKHIR = MULAI + timedelta(days=21)

# kumpulkan jadwal uky threads yang jatuh di jam lama
semua, page = [], 1
while True:
    d = client.get_schedules(page=page, limit=100)
    rows = d.get("docs", []) if isinstance(d, dict) else []
    semua += rows
    if len(rows) < 100:
        break
    page += 1

sasaran = []
for s in semua:
    if s.get("accountId") != ACC.UKY_THREADS or s.get("status") != "pending":
        continue
    kapan = str(s.get("scheduleAt") or "")
    if kapan >= "2090":
        continue
    try:
        t = datetime.fromisoformat(kapan.replace("Z", "+00:00"))
    except Exception:
        continue
    wib = t + timedelta(hours=7)
    if not (datetime(MULAI.year, MULAI.month, MULAI.day, tzinfo=timezone.utc) <= t
            <= datetime(AKHIR.year, AKHIR.month, AKHIR.day, 23, 59, tzinfo=timezone.utc)):
        continue
    if wib.hour == JAM_LAMA_WIB:
        sasaran.append({"id": s.get("_id"), "lama": wib.strftime("%d %b %H:%M"), "hari": wib.date()})
sasaran.sort(key=lambda x: x["hari"])

print(f"jadwal uky jam {JAM_LAMA_WIB}:00 dalam 21 hari: {len(sasaran)}")
print(f"caption tersedia: {len(CAPTION)}\n")
rencana = []
for i, s in enumerate(sasaran[:len(CAPTION)]):
    hari = s["hari"]
    slot = datetime(hari.year, hari.month, hari.day, (JAM_BARU_WIB - 7) % 24, 30, 0, tzinfo=timezone.utc)
    rencana.append({**s, "slot": slot.strftime("%Y-%m-%dT%H:%M:%S.000Z"),
                    "baru": (slot + timedelta(hours=7)).strftime("%d %b %H:%M"),
                    "caption": CAPTION[i]})
    print(f"   {s['lama']} → {rencana[-1]['baru']} | {CAPTION[i][:66]}")

if "--apply" not in sys.argv:
    print("\n(dry run — pakai --apply)")
    simpan = [{k: (str(v) if hasattr(v, "isoformat") else v) for k, v in r.items()} for r in rencana]
    json.dump(simpan, open(f"{WS}/drafts/threads_uji21_rencana.json", "w"), indent=1, ensure_ascii=False)
    sys.exit(0)

print("\n=== menerapkan ===")
ok = gagal = 0
for r in rencana:
    try:
        asli = client.get_schedule(r["id"])
        badan = dict(asli)
        badan["scheduleAt"] = r["slot"]
        badan["description"] = r["caption"]
        for k in ("_id", "id", "createdAt", "updatedAt", "__v"):
            badan.pop(k, None)
        client._request("PUT", f"/public/schedule/{r['id']}", badan)
        cek = client.get_schedule(r["id"])
        benar = (str(cek.get("scheduleAt", ""))[:16] == r["slot"][:16]
                 and r["caption"][:40] in str(cek.get("description", "")))
        ok += 1 if benar else 0
        gagal += 0 if benar else 1
        print(f"   {r['baru']} | {'✅' if benar else '⚠️'}")
    except Exception as e:
        gagal += 1
        print(f"   ❌ {str(e)[:70]}")
print(f"\nselesai: berhasil {ok} | gagal {gagal}")
