# Panduan Instalasi

## 1. Kebutuhan
**Komputer guru (server):** Windows 10/11, Python 3.10+ (centang *Add to PATH*), Node.js 18+ (hanya untuk membangun dashboard; tidak perlu jika `frontend/dist` sudah ada), XAMPP (MySQL/MariaDB) — atau SQLite untuk uji. IP **tetap/statis** (mis. 192.168.1.2).
**Komputer siswa:** Windows 10/11, terhubung ke jaringan yang sama, akun Administrator lokal untuk pemasangan. Python 3.10+ bila memasang dari sumber (atau gunakan `.exe` hasil `build_agent.bat`).

## 2. Database (phpMyAdmin)
1. Jalankan XAMPP → Start **MySQL**.
2. Buka `http://localhost/phpmyadmin` → tab **Import** → pilih `database/classroom_management_db.sql` → **Go**.
3. (Opsional) impor `database/seed.sql` untuk pengaturan bawaan dan contoh kelas/siswa.
4. Server membuat tabel yang kurang secara otomatis, jadi impor ini boleh dilewati — tetapi database `classroom_management_db` harus ada.
5. Produksi: buat pengguna MySQL khusus (jangan `root` tanpa password) dan isi di `CMS_DATABASE_URL`.

## 3. Server (komputer guru)
```bat
scripts\install_server.bat 192.168.1.2 nama-pc-guru
```
Argumen opsional = IP/nama host yang dimasukkan ke sertifikat HTTPS. Skrip membuat venv, memasang dependensi, membangun dashboard, membuat `backend\.env`, dan sertifikat `backend\data\server.crt`.

Edit `backend\.env`:
- `CMS_DATABASE_URL=mysql+pymysql://USER:PASS@127.0.0.1:3306/classroom_management_db?charset=utf8mb4`
  (uji tanpa MySQL: `sqlite:///data/cms.db`)
- `CMS_WOL_BROADCAST` = alamat broadcast subnet, mis. `192.168.1.255`.

Buka firewall server (PowerShell Administrator):
`netsh advfirewall firewall add rule name="CMS Server" dir=in action=allow protocol=TCP localport=8443`

Jalankan `scripts\start_server.bat`. Buka `https://192.168.1.2:8443` (peringatan sertifikat self-signed wajar; atau pasang `server.crt` ke Trusted Root di komputer guru). Isi **Setup Awal** dengan kode dari jendela server / `backend\data\setup_code.txt` (sekali pakai).

Agar server hidup otomatis: Task Scheduler → *At startup* → `scripts\start_server.bat` (atau NSSM).

## 4. Agent (komputer siswa)
1. Di dashboard: **Pengaturan Sistem → Pendaftaran Agent**, salin kunci pendaftaran & perintah.
2. Salin ke komputer siswa: folder `client-agent`, dan `backend\data\server.crt`.
3. PowerShell **sebagai Administrator**:
```powershell
powershell -ExecutionPolicy Bypass -File client-agent\installer\install_agent.ps1 -Server https://192.168.1.2:8443 -Key KUNCI -CaFile .\server.crt
```
Opsi: `-AppLocker` (Windows Enterprise/Education), `-ProtectTaskManager`, `-DryRun` (hanya mencatat perintah).
4. Komputer muncul di **Daftar Komputer** (nama = nama host, mis. MURID01). Beri nama komputer yang unik **sebelum** memasang.
5. Pemasangan massal 35 PC: letakkan folder + `server.crt` di berbagi jaringan lalu jalankan `scripts\install_agent.bat ALAMAT KUNCI server.crt` lewat GPO startup script atau PDQ/Intune.
6. `.exe` mandiri (tanpa Python di siswa): di PC build jalankan `client-agent\installer\build_agent.bat` (PyInstaller); installer Inno Setup: `agent.iss`.

## 5. Wake-on-LAN
Aktifkan *Wake on LAN* di BIOS dan properti kartu jaringan (Power Management → Allow magic packet), gunakan kabel LAN. Wi-Fi umumnya tidak didukung.

## 6. Pembaruan & pelepasan
- Pembaruan agent: jalankan ulang `install_agent.ps1` (data/token dipertahankan).
- Pelepasan: di dashboard buka komputer → **Lepas perangkat dari server** (mencabut token & menghapus semua aturan), lalu `client-agent\installer\uninstall_agent.ps1` sebagai Administrator.

## 7. Menjalankan uji
```bash
pip install -r backend/requirements.txt -r client-agent/requirements.txt pytest httpx websockets
pytest tests -q
```
`test_browser_real.py` membutuhkan Google Chrome/Chromium.
