#!/usr/bin/env python3
"""
sync-docs.py — Salin chapters/ ke docs/ untuk MkDocs
=====================================================
Bersihkan:
  - metadata block  (```metainfo ... ```)
  - HTML comment    (<!-- ... -->)
  - mermaid block   → ganti dengan blockquote keterangan
  - baris kosong berlebih (maks 2)

Buat docs/index.md dan docs/rps-sim.md otomatis.
"""

import re
import argparse
import shutil
from pathlib import Path

ROOT       = Path(__file__).parent.parent
CHAPTERS   = ROOT / "chapters"
BACKMATTER = ROOT / "backmatter"
FOUNDATION = ROOT / "foundation"
DOCS       = ROOT / "docs"


def clean(text: str) -> str:
    # 1. Hapus metadata block
    text = re.sub(r"^```metainfo\s*\n.*?```\s*\n?", "", text,
                  flags=re.DOTALL | re.MULTILINE)
    # 2. Hapus HTML comment
    text = re.sub(r"<!--.*?-->", "", text, flags=re.DOTALL)
    # 3. Ganti mermaid dengan keterangan
    def mermaid_sub(m: re.Match) -> str:
        first = m.group(1).strip().splitlines()[0] if m.group(1).strip() else "Diagram"
        return f"\n> **[Diagram]** *{first}* — lihat versi cetak.\n"
    text = re.sub(r"```mermaid\s*\n(.*?)```", mermaid_sub, text, flags=re.DOTALL)
    # 4. Normalisasi baris kosong
    text = re.sub(r"\n{3,}", "\n\n", text)
    return text.strip() + "\n"


def write(dst: Path, content: str) -> None:
    dst.write_text(content, encoding="utf-8")


def sync(verbose: bool) -> None:
    if verbose:
        print(f"docs/ → {DOCS}")

    DOCS.mkdir(parents=True, exist_ok=True)

    # Chapters
    for src in sorted(CHAPTERS.glob("bab-*.md")):
        write(DOCS / src.name, clean(src.read_text("utf-8")))
        if verbose:
            print(f"  ✓ {src.name}")

    # Backmatter
    for name in ["kata-pengantar.md", "references.md", "glosarium.md",
                 "indeks.md", "tentang-penulis.md"]:
        src = BACKMATTER / name
        if src.exists():
            write(DOCS / name, clean(src.read_text("utf-8")))
            if verbose:
                print(f"  ✓ {name}")

    # RPS
    rps = FOUNDATION / "RPS-SIM.md"
    if rps.exists():
        write(DOCS / "rps-sim.md", clean(rps.read_text("utf-8")))
        if verbose:
            print("  ✓ rps-sim.md")

    # index.md
    index = """\
# Sistem Informasi Manajemen di Era AI

**Perspektif Strategis dan Pengambilan Keputusan**

*Helmi Bahar Alim, S.Kom., M.Kom.* — Universitas Putra Bangsa, Kebumen · Edisi 2025/2026

---

## Tentang Buku Ini

Buku ajar mata kuliah **Sistem Informasi Manajemen (SIM)** yang dirancang untuk era
kecerdasan buatan. Buku ini membekali mahasiswa dengan kerangka berpikir manajerial
untuk menggunakan SI sebagai senjata pengambilan keputusan.

## Struktur Buku

| Bagian | Topik | Bab |
|--------|-------|-----|
| I | Konteks Strategis | 1–2 |
| II | Fondasi Berpikir Manajerial | 3–5 |
| III | SI dalam Proses Bisnis & Keputusan | 6–9 |
| IV | Perancangan Solusi SI | 10–12 |
| V | Implementasi, Evaluasi & Risiko | 13–15 |
| VI | Transformasi Digital, AI & Masa Depan | 16–18 |

## Navigasi Cepat

- [Kata Pengantar](kata-pengantar.md)
- [BAB 1 — Mulai dari sini →](bab-01.md)
- [Glosarium](glosarium.md)
- [Referensi](references.md)
- [RPS Mata Kuliah](rps-sim.md)
"""
    write(DOCS / "index.md", index)
    if verbose:
        print("  ✓ index.md")

    print("✅ Sync selesai → docs/")


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--verbose", "-v", action="store_true")
    parser.add_argument("--clean", action="store_true",
                        help="Hapus docs/ dulu sebelum sync")
    args = parser.parse_args()
    if args.clean and DOCS.exists():
        shutil.rmtree(DOCS)
    sync(args.verbose)
