#!/usr/bin/env python3
"""Ganti semua rujukan path profil atun → bambang di dalam salinan profil bambang.

Hanya berkas teks. Berkas biner dan media dilewati. Jalankan tanpa argumen = hitung dulu; --go = ganti.
"""
import os, re, sys

AKAR = "/home/mantapman/.hermes/profiles/bambang"
LAMA = "/home/mantapman/.hermes/profiles/atun"
BARU = "/home/mantapman/.hermes/profiles/bambang"
TEXT = (".py", ".sh", ".json", ".yaml", ".yml", ".md", ".txt", ".service", ".env", ".conf", ".cfg")
GO = "--go" in sys.argv
BATAS = 5 * 1024 * 1024

kena, total_kejadian = [], 0
for akar, dirs, files in os.walk(AKAR):
    dirs[:] = [d for d in dirs if d not in ("node_modules", ".git", "__pycache__")]
    for f in files:
        p = os.path.join(akar, f)
        if not f.endswith(TEXT):
            continue
        try:
            if os.path.getsize(p) > BATAS:
                continue
            t = open(p, encoding="utf-8", errors="strict").read()
        except Exception:
            continue
        n = t.count(LAMA)
        if n:
            kena.append((p, n))
            total_kejadian += n

print(f"{len(kena)} berkas berisi path atun · {total_kejadian} rujukan")
for p, n in sorted(kena, key=lambda x: -x[1])[:8]:
    print(f"   {n:>4}× {p.replace(AKAR + '/', '')}")

if GO:
    gagal = 0
    for p, n in kena:
        try:
            t = open(p, encoding="utf-8", errors="strict").read()
            open(p, "w", encoding="utf-8").write(t.replace(LAMA, BARU))
        except Exception as e:
            gagal += 1
            print(f"   gagal {p}: {str(e)[:40]}")
    print(f"\n✅ {len(kena) - gagal} berkas diperbarui · gagal {gagal}")
else:
    print("\n(uji — pakai --go untuk mengganti)")
