# Modul Manajemen Lokasi

Modul ini menangani pengelolaan lokasi, termasuk lokasi rekomendasi dan pengaturan editabilitas lokasi saat absensi.

## Daftar Isi
- [Endpoint API](#endpoint-api)
- [Mendapatkan Lokasi Rekomendasi](#mendapatkan-lokasi-rekomendasi)
- [Integrasi Mobile](#integrasi-mobile)

## Endpoint API

| Method | Endpoint | Deskripsi |
|--------|----------|-----------|
| GET | `/api/locations/recommended` | Mendapatkan daftar lokasi rekomendasi |

## Mendapatkan Lokasi Rekomendasi

Endpoint ini digunakan untuk mendapatkan daftar lokasi rekomendasi yang dapat digunakan saat absensi.

### Request
```http
GET /api/locations/recommended
Authorization: Bearer {token}
```

### Response
```json
{
  "locations": [
    {
      "id": "int",
      "name": "string",
      "lat": "float",
      "lng": "float",
      "address": "string"
    }
  ]
}
```

### Deskripsi Field
- `id`: ID unik lokasi
- `name`: Nama lokasi (misal: BPKP Pramuka)
- `lat`: Koordinat lintang
- `lng`: Koordinat bujur
- `address`: Alamat lengkap lokasi

## Integrasi Mobile

### Tampilan Lokasi Rekomendasi
1. Aplikasi mobile memanggil endpoint `/api/locations/recommended` untuk mendapatkan daftar lokasi
2. Tampilkan lokasi rekomendasi dalam bentuk daftar atau peta
3. Gunakan nama lokasi yang mudah dikenali pengguna
4. Tampilkan alamat lengkap untuk kejelasan

### Penggunaan Lokasi Saat Absensi
- Jika pengaturan `location_editable` adalah false, wajibkan pengguna memilih dari lokasi rekomendasi
- Jika pengaturan `location_editable` adalah true, tampilkan lokasi rekomendasi sebagai saran
- Tampilkan jarak antara lokasi pengguna saat ini dengan lokasi rekomendasi

### Peta Interaktif
- Jika lokasi editable, tampilkan peta dengan marker yang bisa digeser
- Tampilkan lokasi rekomendasi sebagai marker khusus di peta
- Tampilkan radius toleransi jika ada batasan jarak

### Validasi Lokasi
- Jika lokasi tidak editable, validasi bahwa lokasi yang dikirim adalah salah satu dari lokasi rekomendasi
- Tambahkan toleransi jarak jika diperlukan (misalnya 50 meter dari titik lokasi)
- Tampilkan pesan error jika lokasi tidak valid

### Pembaruan Lokasi
- Jika daftar lokasi rekomendasi berubah di backend, sinkronisasikan ke aplikasi mobile
- Tampilkan notifikasi jika ada lokasi baru yang ditambahkan
- Pastikan data lokasi tetap akurat dan terkini