#!/usr/bin/env python3
"""Cek kesehatan jadwal terbit TSC: aturan 1 artikel per hari, hari kosong, dan sisa persediaan.

Keluar dengan kode 1 kalau ada masalah (dipakai job harian).
"""
import base64, importlib.util, json, sys, time, urllib.error, urllib.request
from datetime import datetime, timedelta, timezone

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
sys.path.insert(0, WS)
from tsc_http import rest_json

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)
CFG = m.CFG
DOM = CFG["domain"]
AUTH = base64.b64encode(f"{CFG['user']}:{CFG['pass']}".encode()).decode()
UA = {"User-Agent": "Mozilla/5.0"}
WIB = timezone(timedelta(hours=7))
MINIMAL_HARI = 10


def rest(path):
    for i in range(3):
        try:
            st, data = rest_json("GET", path)
            if st == 200:
                return data
            time.sleep(3)
        except Exception:
            time.sleep(3)
    return {}


future = rest("/wp-json/wp/v2/posts?per_page=100&status=future&orderby=date&order=asc&_fields=id,slug,date")
terbit = rest("/wp-json/wp/v2/posts?per_page=60&status=publish&orderby=date&order=desc&_fields=id,slug,date")
masalah = []

hari_ini = datetime.now(WIB).date()
print(f"TSC — cek jadwal {hari_ini}")

# 1. hari kosong dalam 14 hari ke depan
per_hari = {}
for x in (future if isinstance(future, list) else []):
    per_hari.setdefault(x["date"][:10], []).append(x)
kosong = [((hari_ini + timedelta(days=i)).isoformat()) for i in range(1, 15)
          if (hari_ini + timedelta(days=i)).isoformat() not in per_hari]
if kosong:
    masalah.append(f"{len(kosong)} hari kosong: {', '.join(kosong[:5])}")

# 2. hari dengan lebih dari satu artikel (terjadwal maupun terbit)
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}")

terbit_per_hari = {}
for x in (terbit if isinstance(terbit, list) else []):
    tgl = x["date"][:10]
    # hanya 14 hari terakhir: hari-hari lama (Jul-Agu) memang terbit massal sebelum aturan ini
    if tgl >= (hari_ini - timedelta(days=14)).isoformat():
        terbit_per_hari.setdefault(tgl, []).append(x)
ganda_terbit = {t: len(v) for t, v in terbit_per_hari.items() if len(v) > 1}
if ganda_terbit:
    masalah.append(f"hari terbit lebih dari 1 artikel (14 hari terakhir): {ganda_terbit}")

# 3. persediaan
if isinstance(future, list) and future:
    terakhir = datetime.fromisoformat(future[-1]["date"]).date()
    sisa = (terakhir - hari_ini).days
    print(f"terjadwal: {len(future)} artikel · sampai {terakhir} ({sisa} hari)")
    if sisa < MINIMAL_HARI:
        masalah.append(f"persediaan tinggal {sisa} hari")
else:
    masalah.append("belum ada artikel terjadwal")

print("\n8 jadwal terdekat:")
for x in (future[:8] if isinstance(future, list) else []):
    print(f"  {x['date'][:16]} | /{x['slug'][:60]}")

print("\naturan 1 artikel/hari: " + ("terlanggar" if (ganda or ganda_terbit) else "aman"))
if masalah:
    print("\nHASIL: perlu ditindak → " + " · ".join(masalah))
    sys.exit(1)
print("\nHASIL: jadwal sehat")
