# 📧 Fitur Hubungi Kami (Contact Feature) - Dokumentasi Lengkap

## 📋 Ringkasan Fitur

Fitur "Hubungi Kami" (Contact) adalah sistem komunikasi terintegrasi yang memungkinkan pengguna website untuk mengirimkan pesan ke admin. Pesan tersebut akan disimpan di database dan admin dapat mengelola serta membalas pesan melalui dashboard admin.

---

## 🏗️ Arsitektur Sistem

```
User mengirim pesan via form
        ↓
Validasi & Penyimpanan ke Database (contacts table)
        ↓
Email ke Admin (ContactMail)
        ↓
Auto-Reply ke User (AutoReplyMail)
        ↓
Admin melihat di Dashboard (/admin/contacts)
        ↓
Admin dapat membalas (AdminReplyMail)
```

---

## 📂 File-File yang Terlibat

### 1. **Controller**
- **File:** `app/Http/Controllers/PageController.php`
  - Method: `sendContact()` - Memproses form kontak  
  - Method: `contact()` - Menampilkan halaman kontak

- **File:** `app/Http/Controllers/Admin/ContactController.php`
  - Method: `index()` - List semua pesan
  - Method: `show()` - Detail pesan
  - Method: `reply()` - Balas pesan
  - Method: `updateStatus()` - Update status pesan
  - Method: `destroy()` - Hapus pesan
  - Method: `bulkDestroy()` - Hapus multiple pesan
  - Method: `export()` - Export ke CSV

### 2. **Model**
- **File:** `app/Models/Contact.php`
  - Attributes: name, email, subject, message, ip_address, user_agent, status, admin_note, read_at, replied_at
  - Scopes: `pending()`, `unread()`
  - Methods: `markAsRead()`, `markAsReplied()`

### 3. **Routes**
- **Public Routes:**
  - `GET /kontak` - Tampilkan form kontak
  - `POST /kontak` - Proses pengiriman pesan

- **Admin Routes:**
  - `GET /admin/contacts` - List pesan
  - `GET /admin/contacts/{id}` - Detail pesan
  - `POST /admin/contacts/{id}/reply` - Balas pesan
  - `PUT /admin/contacts/{id}/status` - Update status
  - `DELETE /admin/contacts/{id}` - Hapus pesan
  - `DELETE /admin/contacts/bulk` - Hapus multiple
  - `GET /admin/contacts/export/csv` - Export CSV

### 4. **Database**
- **Table:** `contacts`
  - Columns: id, name, email, subject, message, ip_address, user_agent, status, admin_note, read_at, replied_at, created_at, updated_at
  - Indexes: status, email

### 5. **Mailable Classes**
- **ContactMail:** Email notifikasi ke admin ketika ada pesan baru
- **AutoReplyMail:** Email auto-reply ke user yang mengirim pesan
- **AdminReplyMail:** Email balasan dari admin kepada user

### 6. **Views**
- **Publik:**
  - `resources/views/pages/contact.blade.php` - Form kontak dengan jam operasional dan map

- **Admin:**
  - `resources/views/admin/contacts/index.blade.php` - List pesan dengan filter & search
  - `resources/views/admin/contacts/show.blade.php` - Detail pesan & form balas

- **Emails:**
  - `resources/views/emails/contact.blade.php` - Template email admin
  - `resources/views/emails/auto-reply.blade.php` - Template auto-reply user
  - `resources/views/emails/admin-reply.blade.php` - Template balasan admin

---

## 📊 Status Pesan

| Status | Keterangan | Aksi |
|--------|-----------|------|
| pending | Pesan baru belum dibaca | Mark as read |
| read | Pesan sudah dibaca | Reply |
| replied | Admin sudah membalas | Archive |
| archived | Pesan diarsipkan | Delete |

---

## 🔄 Alur Pengiriman Pesan

### 1. User Mengirim Pesan
```
User mengisi form kontak → Submit →
Validasi di backend → Simpan ke database →
Kirim email ke admin → Kirim auto-reply ke user →
Redirect dengan success message
```

**File terkait:** `PageController@sendContact()`

### 2. Admin Melihat Pesan
```
Login ke admin → Dashboard → Contacts →
List semua pesan dengan status, filter, search → 
Klik detail pesan → Email user ditandai dibaca
```

**File terkait:** `ContactController@index()`, `ContactController@show()`

### 3. Admin Membalas Pesan
```
Admin lihat detail pesan → Ketik balasan →
Submit → Kirim email balasan ke user →
Status berubah menjadi "replied" →
User menerima email balasan
```

**File terkait:** `ContactController@reply()`

---

## 📧 Email Templates

### Email ke Admin (ContactMail)
**Dikirim ke:** Admin email dari config  
**Konten:**
- Nama pengirim
- Email pengirim
- Subjek pesan
- Isi pesan
- Link cepat ke dashboard admin

### Auto-Reply ke User (AutoReplyMail)
**Dikirim ke:** Email user  
**Konten:**
- Ucapan terima kasih
- Pesan yang dikirim
- Response time
- Nomor kontak darurat

### Balasan Admin (AdminReplyMail)
**Dikirim ke:** Email user  
**Konten:**
- Balasan dari admin
- Pesan asli dari user
- Footer dengan info kontak

---

## 🛠️ Konfigurasi

### 1. Email Admin
**File:** `.env` atau `config/mail.php`
```env
MAIL_ADMIN_ADDRESS=admin@finanalysis.pro
MAIL_FROM_NAME="FIN-ANALYSIS PRO"
```

### 2. Response Time
Di-hardcode di view sebagai:
- Email: Dalam 24 jam
- Chat: Realtime
- Telepon: Instant

---

## 📱 User Interface

### Halaman Kontak Publik
- Hero section dengan judul & deskripsi
- 3 info box: Alamat, Telepon, Email
- Form kontak dengan field: Nama, Email, Phone, Subject, Message
- Info jam operasional
- Google Maps
- Social media links

### Admin Dashboard Contacts
- Header dengan statistik 5 kartu (Total, Unread, Pending, Read, Replied)
- Filter & search message
- Tabel daftar pesan dengan kolom: Checkbox, Pengirim, Subjek, Status, Tanggal, Aksi
- Detail pesan untuk dibaca & dibalas
- Option: Update status, Delete, Export CSV

---

## 🔐 Validasi & Keamanan

### Validasi Input (Backend)
```php
'name'    => 'required|string|max:255',
'email'   => 'required|email|max:255',
'subject' => 'required|string|max:255',
'message' => 'required|string|min:10',
```

### Keamanan
- Admin routes dilindungi middleware `auth` & `admin`
- IP address & user agent disimpan untuk tracking
- Email CSRF protection di form
- Proper error handling dengan logging

---

## 🧪 Testing Checklist

- [ ] Form kontak dapat diakses di `/kontak`
- [ ] Validasi form berfungsi (coba submit kosong)
- [ ] Email admin diterima ketika user submit
- [ ] Auto-reply email diterima user
- [ ] Pesan tersimpan di database dengan status "pending"
- [ ] Admin dapat lihat pesan di `/admin/contacts`
- [ ] Admin dapat filter & search pesan
- [ ] Admin dapat klik detail pesan
- [ ] Status berubah ke "read" ketika admin klik detail
- [ ] Admin dapat membalas pesan
- [ ] User menerima email balasan
- [ ] Status berubah ke "replied"
- [ ] Admin dapat update status pesan
- [ ] Admin dapat delete pesan
- [ ] Admin dapat bulk delete
- [ ] Admin dapat export ke CSV

---

## 🐛 Troubleshooting

### Email tidak terkirim
**Solusi:**
1. Cek `.env` konfigurasi mail
2. Cek `MAIL_DRIVER` (gunakan `smtp` atau `mailtrap`)
3. Cek log di `storage/logs/`

### Form tidak submit
**Solusi:**
1. Cek browser console untuk error
2. Verifikasi CSRF token di form
3. Cek validasi rules di controller

### Database error
**Solusi:**
1. Jalankan `php artisan migrate`
2. Cek koneksi database di `.env`

---

## 📈 Fitur Masa Depan

- [ ] Real-time notification bell untuk admin
- [ ] Chat widget di website
- [ ] Attachment upload untuk pesan
- [ ] Automated response templates
- [ ] Ticket system dengan prioritasi
- [ ] Integration dengan ticketing system (Jira, ServiceNow)
- [ ] Multi-language support

---

## 📝 Catatan

- Pesan disimpan dengan `ip_address` dan `user_agent` untuk tracking
- Admin dapat membuat catatan internal dengan `admin_note`
- Timestamps `read_at` dan `replied_at` otomatis tercatat
- Export CSV berguna untuk analisis & reporting

---

**Dokumentasi selesai**  
**Terakhir diupdate:** 4 April 2026
