#!/usr/bin/env python3
"""Cek kesehatan jadwal terbit StudioSoft: hari kosong, hari ganda, sisa persediaan.
Keluar dengan kode 1 kalau ada masalah (dipakai juga oleh cron penjaga).
"""
import base64, json, sys, urllib.request
from datetime import datetime, timedelta, timezone

S = "https://studiosoft.id"
AUTH = base64.b64encode(b"bambangbot:q26r RePo BVy6 pwU2 F3z7 ouyl").decode()
UA = {"User-Agent": "Mozilla/5.0"}
WIB = timezone(timedelta(hours=7))
MINIMAL_HARI = 10


def future():
    h = {"Authorization": f"Basic {AUTH}", **UA}
    r = urllib.request.Request(f"{S}/wp-json/wp/v2/posts?status=future&per_page=100&orderby=date&order=asc"
                               f"&_fields=id,slug,date,title", headers=h)
    return json.loads(urllib.request.urlopen(r, timeout=120).read())


d = future()
per_hari = {}
for p in d:
    per_hari.setdefault(p["date"][:10], []).append(p)

hari_ini = datetime.now(WIB).date()
print(f"artikel menunggu tayang: {len(d)}")
if d:
    print(f"rentang: {d[0]['date'][:10]} s/d {d[-1]['date'][:10]}")
masalah = []
ganda = {t: len(v) for t, v in per_hari.items() if len(v) > 1}
if ganda:
    masalah.append(f"hari dengan lebih dari 1 artikel: {ganda}")
    print(f"⚠ hari ganda: {ganda}")

# cari hari kosong dalam 14 hari ke depan
kosong = []
for i in range(1, 15):
    t = (hari_ini + timedelta(days=i)).isoformat()
    if t not in per_hari:
        kosong.append(t)
if kosong:
    masalah.append(f"hari tanpa artikel: {', '.join(kosong[:5])}")
    print(f"⚠ hari kosong: {', '.join(kosong[:5])}")

terakhir = datetime.fromisoformat(d[-1]["date"]).date() if d else hari_ini
sisa = (terakhir - hari_ini).days
print(f"persediaan: sampai {terakhir} ({sisa} hari dari sekarang)")
if sisa < MINIMAL_HARI:
    masalah.append(f"persediaan tinggal {sisa} hari")
    print(f"⚠ persediaan kurang dari {MINIMAL_HARI} hari")

print("=== 8 jadwal terdekat ===")
for p in d[:8]:
    print(f"  {p['date'][:16]} | #{p['id']:>5} | {p['title']['rendered'][:56]}")

if masalah:
    print("\nHASIL: perlu ditambah / dirapikan → " + " · ".join(masalah))
    sys.exit(1)
print("\nHASIL: jadwal sehat")
