# Solusi Masalah Login Admin dan Superadmin

## Masalah yang Ditemukan
1. **Tidak ada admin user di database** - Database kosong dari user admin
2. **Error image URL** - Icon URL menggunakan emoji yang tidak valid untuk Next.js Image
3. **Belum ada middleware autentikasi** - Tidak ada proteksi rute admin
4. **Hook autentikasi belum standar** - Setiap halaman menghandle autentikasi sendiri

## Solusi yang Sudah Dilakukan

### 1. Membuat Admin User Default
```javascript
// Superadmin
Email: superadmin@polres-wonosobo.dev
Password: admin123

// Admin
Email: admin@polres-wonosobo.dev
Password: admin123
```

### 2. Memperbaiki Image URL
- Mengubah iconUrl dari emoji (🚗, 📄, 🔍) menjadi string kosong
- Mengunduh hero background image yang valid
- Mengupdate settings database dengan URL yang benar

### 3. Membuat Middleware Autentikasi
- File: `/src/middleware.ts`
- Melindungi semua rute admin kecuali login
- Validasi JWT token untuk API routes
- Redirect ke login jika tidak authenticated

### 4. Membuat Hook Autentikasi
- File: `/src/hooks/useAdminAuth.ts`
- Centralized authentication logic
- Auto-logout jika token expired
- Consistent header management

### 5. Memperbaiki Halaman Login
- Menambahkan informasi akun default
- Mengupdate placeholder email yang benar
- Menggunakan hook autentikasi yang baru

## Cara Mengakses Admin Dashboard

1. Buka browser dan navigasi ke:
   ```
   http://localhost:3000/admin/login
   ```

2. Gunakan kredensial berikut:
   - **Superadmin**: `superadmin@polres-wonosobo.dev` / `admin123`
   - **Admin**: `admin@polres-wonosobo.dev` / `admin123`

3. Setelah login, akan diarahkan ke:
   ```
   http://localhost:3000/admin/dashboard
   ```

## Fitur Admin yang Tersedia

### Superadmin:
- Dashboard
- Pengajuan Masuk
- Kelola Layanan
- Kelola Template
- Kelola Pengguna
- Permission
- Kontak & Pesan
- Pengaturan
- Bantuan

### Admin:
- Dashboard
- Pengajuan Masuk
- Kelola Layanan
- Kelola Template
- Kontak & Pesan
- Pengaturan
- Bantuan

## Keamanan
- Password di-hash menggunakan bcrypt
- JWT token dengan expiration 24 jam
- Auto-logout jika token invalid
- Protected routes dengan middleware

## Troubleshooting

### Jika login gagal:
1. Pastikan email dan password benar
2. Cek console browser untuk error
3. Pastikan database sudah ada admin user
4. Restart development server

### Jika halaman tidak bisa diakses:
1. Pastikan sudah login
2. Cek localStorage untuk `adminToken` dan `adminUser`
3. Clear browser cache dan coba lagi

### Jika error 500:
1. Cek dev.log untuk error details
2. Pastikan tidak ada image URL yang invalid
3. Restart development server

## Next Steps
- Ganti password default di production
- Tambah fitur forgot password
- Implement role-based access control yang lebih detail
- Tambah audit log untuk admin actions