#!/usr/bin/env python3
"""Hitung jadwal cron yang paling sering jalan, lalu matikan yang jelas-jelas mubazir.

Aturan aman: berkas jobs.json dicadangkan dulu; hanya job yang namanya disebut yang diubah.
Jalankan tanpa argumen = laporkan saja. Dengan --matikan NAMA = matikan job itu.
"""
import json, shutil, sys, time

BERKAS = "/home/mantapman/.hermes/profiles/atun/cron/jobs.json"
d = json.load(open(BERKAS))
jobs = d if isinstance(d, list) else d.get("jobs", d)
if isinstance(jobs, dict):
    jobs = list(jobs.values())


def jalan_per_hari(expr):
    """Perkiraan berapa kali job jalan dalam sehari dari ekspresi cron 5 kolom."""
    try:
        bagian = expr.split()
        m, h = bagian[0], bagian[1]
        if m.startswith("*/"):
            per_jam = 60 / int(m[2:])
            jam = 24 if h == "*" else len(h.split(","))
        elif m == "*":
            per_jam = 60
            jam = 24 if h == "*" else len(h.split(","))
        else:
            daftar_m = m.split(",")
            per_jam = len(daftar_m)
            if h == "*":
                jam = 24
            elif h.startswith("*/"):
                jam = 24 / int(h[2:])
            else:
                jam = len(h.split(","))
        return int(per_jam * jam)
    except Exception:
        return None


print("=== 12 cron paling sering jalan ===")
urut = []
for j in jobs:
    e = (j.get("schedule") or {}).get("expr")
    if not e or not j.get("enabled"):
        continue
    n = jalan_per_hari(e)
    if n:
        urut.append((n, j.get("name"), e))
for n, nama, e in sorted(urut, reverse=True)[:12]:
    print(f"   {n:>4}×/hari · {str(nama)[:38]:<40} {e}")
print(f"\n   total cron aktif: {sum(1 for j in jobs if j.get('enabled'))} dari {len(jobs)}")

if len(sys.argv) > 2 and sys.argv[1] == "--matikan":
    sasaran = sys.argv[2]
    shutil.copy(BERKAS, f"{BERKAS}.bak-{time.strftime('%Y%m%d-%H%M')}")
    ubah = 0
    daftar = d if isinstance(d, list) else jobs
    for j in daftar:
        if str(j.get("name")) == sasaran:
            j["enabled"] = False
            ubah += 1
    json.dump(d, open(BERKAS, "w"), ensure_ascii=False, indent=1)
    print(f"\n✅ {ubah} job dimatikan: {sasaran} · cadangan jobs.json dibuat")
else:
    print("\n(untuk mematikan: jalankan lagi dengan --matikan <nama job>)")
