# Faz 1: Konum/WiFi Tabanli Otomatik Mesai Takibi - Uygulama Plani

## Genel Bakis

Mevcut saat/tolerans tabanli giris/cikis sistemine ek olarak geofence + WiFi tabanli otomatik mesai takibi eklenmesi. Mevcut `CalismaKayit`, `ModelAyarlar`, background service ve bildirim altyapisi genisletilecek.

**Temel Yaklasim:** Isar embedded modeller uzerinden calismak (mevcut pattern), `ModelAyarlar` icine `KonumAyarlari` eklemek, background service'e geofence event listener eklemek.

---

## Adim 1: Paket Bagimliliklari Ekleme

**Dosya:** `pubspec.yaml`

Asagidaki paketler `dependencies` bolumune eklenecek:

```yaml
geolocator: any              # Konum servisleri (izin, konum alma)
geofencing_api: any           # OS seviyesi geofence (dusuk pil)
wifi_scan: any                # WiFi SSID tarama
google_maps_flutter: any      # Harita picker UI
```

**Bagimlilik:** Yok (ilk adim)

---

## Adim 2: Isyeri Isar Modeli Olusturma

**Dosya (yeni):** `lib/apps/mesaici/model/isyeri/isyeri.dart`

Isar `@embedded` sinif olarak olusturulacak (mevcut `Mola`, `Maas` gibi `ModelAyarlar` icerisinde kullanilacagi icin `@embedded`):

```dart
@embedded
@JsonSerializable()
class Isyeri {
  Isyeri();

  String? id;           // UUID ile uretilecek
  String? ad;
  String? ikon;         // emoji veya ikon adi
  double? enlem;
  double? boylam;
  int yaricapMetre = 150;  // 50-500 arasi, varsayilan 150
  String? wifiSSID;        // opsiyonel WiFi dogrulama
  bool aktif = true;
}
```

Extension metotlari:
- `List<Isyeri>.copy()` - mevcut pattern'e uygun derin kopya
- `List<Isyeri>.aktifler` - sadece aktif isyerlerini dondurme

**Bagimlilik:** Yok

---

## Adim 3: KonumAyarlari ve KonumTakipModu Olusturma

**Dosya (yeni):** `lib/apps/mesaici/model/konum/konum_ayarlari.dart`

```dart
enum KonumTakipModu {
  MANUEL,           // mevcut akis, degisiklik yok
  YARI_OTOMATIK,    // bildirimle onay sor
  TAM_OTOMATIK;     // direkt giris/cikis yap
}

@embedded
@JsonSerializable()
class KonumAyarlari {
  KonumAyarlari();

  @enumerated
  KonumTakipModu mod = KonumTakipModu.MANUEL;

  List<Isyeri> isyerleri = <Isyeri>[];

  bool geceModuAktif = true;       // 00:00-05:00 pasif
  bool wifiDogrulamaAktif = false; // geofence tetiklenince WiFi kontrol
}
```

**Bagimlilik:** Adim 2

---

## Adim 4: ModelAyarlar'a KonumAyarlari Ekleme

**Dosya (degisiklik):** `lib/apps/mesaici/model/ayarlar/model_ayarlar.dart`

`ModelAyarlar` sinifina yeni alan eklenmesi:

```dart
KonumAyarlari konumAyarlari = KonumAyarlari();
```

Import'lar eklenmesi:
```dart
import '../konum/konum_ayarlari.dart';
import '../isyeri/isyeri.dart';
```

**Sonra:** `build_runner` calistirilarak `model_ayarlar.g.dart` yeniden uretilecek.

**Bagimlilik:** Adim 2, Adim 3

---

## Adim 5: CalismaKayit Modeline konumKaynak Alani Ekleme

**Dosya (degisiklik):** `lib/apps/mesaici/model/calisma_kayit/calisma_kayit.dart`

Yeni enum ve alan:

```dart
enum KonumKaynak { MANUEL, KONUM, WIFI }
```

`CalismaKayit` sinifina ekleme:

```dart
@enumerated
KonumKaynak konumKaynak = KonumKaynak.MANUEL;

String? tetikleyenIsyeriId;  // hangi isyeri tetikledi
```

Ayni alanlar `CalismaKayitEmbedded` sinifina da eklenmeli (`model_hareketler.dart` icinde).

**Sonra:** `build_runner` calistirilarak `.g.dart` dosyalari yeniden uretilecek.

**Bagimlilik:** Yok (model_hareketler.dart da kontrol edilmeli)

---

## Adim 6: BildirimAyarlari'na Konum Bildirimleri Ekleme

**Dosya (degisiklik):** `lib/apps/mesaici/model/ayarlar/model_ayarlar.dart`

`BildirimAyarlari` sinifina yeni alanlar:

```dart
bool konumGirisBildirimleri = true;   // geofence giris bildirimi
bool konumCikisBildirimleri = true;   // geofence cikis bildirimi
```

`tumunuAc()` ve `tumunuKapat()` metotlari guncellenmeli.

**Bagimlilik:** Yok

---

## Adim 7: AktifDurum Enum'una Konum Durumlari Ekleme

**Dosya (degisiklik):** `lib/apps/mesaici/servisler/mesaici.background/aktif_durum.dart`

Yeni enum degerleri:

```dart
ISYERI_BOLGESINDE,
ISYERI_BOLGESINDE_DEGIL,
KONUM_TAKIP_AKTIF,
KONUM_TAKIP_PASIF,
KONUM_GECE_MODU_AKTIF,
WIFI_DOGRULANDI,
WIFI_DOGRULANMADI,
KONUM_GIRIS_BILDIRIMLERI_GOSTERILECEK,
KONUM_CIKIS_BILDIRIMLERI_GOSTERILECEK,
```

**Bagimlilik:** Yok

---

## Adim 8: GeofenceService Olusturma

**Dosya (yeni):** `lib/apps/mesaici/servisler/konum/geofence_service.dart`

Sorumluluklar:
- `geofencing_api` paketi uzerinden geofence bolgesi kaydetme/silme
- Isyeri listesinden geofence bolgeleri olusturma
- Giris/cikis event'lerini callback ile bildirme
- Gece modu kontrolu (00:00-05:00 arasi pasif)

Temel metotlar:
```dart
class GeofenceService {
  Future<void> isyeriBolgeleriKaydet(List<Isyeri> isyerleri);
  Future<void> tumBolgeleriSil();
  Future<void> bolgeGuncelle(Isyeri isyeri);
  bool geceModundaMi();  // 00:00-05:00 kontrolu
  Stream<GeofenceEvent> get olayAkisi;
}
```

`GeofenceEvent` modeli:
```dart
class GeofenceEvent {
  final String isyeriId;
  final GeofenceEventTuru tur;  // GIRIS, CIKIS
  final DateTime zaman;
}
```

**Bagimlilik:** Adim 1 (paketler), Adim 2 (Isyeri modeli)

---

## Adim 9: WiFiService Olusturma

**Dosya (yeni):** `lib/apps/mesaici/servisler/konum/wifi_service.dart`

Sorumluluklar:
- `wifi_scan` paketi ile WiFi SSID tarama (sadece geofence tetiklenince)
- Belirtilen SSID'nin mevcut aglar arasinda olup olmadigini kontrol etme

Temel metotlar:
```dart
class WiFiService {
  Future<bool> wifiTaramaYap(String hedefSSID);
  Future<List<String>> mevcutAglariListele();
  Future<bool> wifiIzniVarMi();
}
```

**Bagimlilik:** Adim 1 (paketler)

---

## Adim 10: IsyeriService Olusturma

**Dosya (yeni):** `lib/apps/mesaici/servisler/konum/isyeri_service.dart`

Sorumluluklar:
- Isyeri CRUD islemleri (ModelAyarlar.konumAyarlari.isyerleri uzerinde)
- Isyeri eklendiginde/silindiginde geofence bolgelerini guncelleme
- Konum izinlerini kontrol etme ve isteme

Temel metotlar:
```dart
class IsyeriService {
  void isyeriEkle(Isyeri isyeri);
  void isyeriGuncelle(String id, Isyeri isyeri);
  void isyeriSil(String id);
  List<Isyeri> isyerleriAl();
  Future<bool> konumIzniKontrol();
  Future<bool> konumIzniIste();
}
```

Bu servis `FikoYTMesaiciService` icerisinde kullanilacak, GetX `Get.put()` ile register edilecek.

**Bagimlilik:** Adim 2, Adim 3, Adim 4, Adim 8

---

## Adim 11: Konum Izin Yonetimi

**Dosya (yeni):** `lib/apps/mesaici/servisler/konum/konum_izin_yonetici.dart`

Sorumluluklar:
- `geolocator` + `permission_handler` (zaten mevcut pubspec'te) ile konum izinlerini yonetme
- "Her zaman" konum izni isteme (arka plan geofence icin gerekli)
- WiFi tarama izni isteme (Android icin)
- Izin verilmezse kullaniciya aciklayici dialog gosterme
- Izin durumunu kontrol etme

Temel metotlar:
```dart
class KonumIzinYonetici {
  Future<bool> konumIzniKontrol();
  Future<bool> herZamanKonumIzniIste(BuildContext context);
  Future<bool> wifiIzniKontrol();
  Future<bool> wifiIzniIste(BuildContext context);
  Future<void> izinAciklamaDialoguGoster(BuildContext context);
}
```

Izin akisi:
1. Kullanici konum takibi actiginda ilk olarak `izinAciklamaDialoguGoster` cagrilir
2. Dialog kapandiktan sonra `herZamanKonumIzniIste` cagrilir
3. Izin verilmezse mod otomatik olarak `MANUEL`'e doner
4. Periyodik hatirlatma: izin verilmediyse ayarlar sayfasinda uyari gosterme

**Bagimlilik:** Adim 1 (paketler)

---

## Adim 12: Background Service Genisletme - Geofence Event Listener

**Dosya (degisiklik):** `lib/apps/mesaici/servisler/mesaici.background/mesaici.background.dart`

`onMesaiciServisStart` fonksiyonuna eklenmesi gerekenler:

### 12a: Geofence servisi baslatma
Background service basladiginda:
```dart
GeofenceService geofenceService = GeofenceService();
if (ayarlar?.konumAyarlari.mod != KonumTakipModu.MANUEL) {
  await geofenceService.isyeriBolgeleriKaydet(
    ayarlar?.konumAyarlari.isyerleri.where((i) => i.aktif).toList() ?? []
  );
}
```

### 12b: Geofence event dinleme
Yeni bir `service.on("mesaici.servis.olay.geofence.giris")` ve `service.on("mesaici.servis.olay.geofence.cikis")` listener eklenmesi.

### 12c: Karar motoru
Geofence event geldiginde:
1. Gece modu kontrolu (00:00-05:00 arasi ise yoksay)
2. WiFi dogrulama aktif ise WiFi kontrolu
3. `KonumTakipModu`'na gore:
   - `TAM_OTOMATIK`: Direkt giris/cikis yap + bildirim gonder
   - `YARI_OTOMATIK`: Bildirimle kullaniciya sor (Evet/Hayir/Ertele butonlari)

### 12d: Otomatik giris/cikis islemi
Mevcut `aktifKart?.girisYap()` / `aktifKart?.cikisYap()` metotlari kullanilacak. Ek olarak:
```dart
aktifKart?.konumKaynak = KonumKaynak.KONUM;  // veya KonumKaynak.WIFI
aktifKart?.tetikleyenIsyeriId = event.isyeriId;
```

### 12e: Yeni bildirim kanallari
`sartliBildirim` ile yeni konum bazli bildirimler:
- Kanal: `"KonumGirisBildirimleri"` - "Isyerine girdiniz, mesai baslasin mi?"
- Kanal: `"KonumCikisBildirimleri"` - "Isyerinden ayrildiniz, mesai bitsin mi?"

Yari otomatik moddaki bildirim butonlari:
```dart
AndroidNotificationAction("com.fikoyt.mesaici.komut.konum.giris.evet", "Evet"),
AndroidNotificationAction("com.fikoyt.mesaici.komut.konum.giris.hayir", "Hayir"),
AndroidNotificationAction("com.fikoyt.mesaici.komut.konum.giris.ertele", "Ertele"),
```

### 12f: Ayarlar guncelleme dinleyicisi
Mevcut `service.on("mesaici.servis.olay.ayarlar.guncelle")` listener'ina ek:
```dart
// Konum ayarlari degistiyse geofence bolgelerini guncelle
if (ayarlar?.konumAyarlari.mod != KonumTakipModu.MANUEL) {
  await geofenceService.isyeriBolgeleriKaydet(...);
} else {
  await geofenceService.tumBolgeleriSil();
}
```

**Bagimlilik:** Adim 4, 5, 6, 7, 8, 9

---

## Adim 13: Intent Yonetimi Genisletme

**Dosya (degisiklik):** `lib/apps/mesaici/servisler/fikoyt.mesaici.service.dart`

`intentMetodCalistir` metoduna yeni intent handler'lar:

```dart
// Konum bazli giris
if (actionId == "com.fikoyt.mesaici.komut.konum.giris.evet") {
  aktifCalisma?.value?.kartEkle(gunAyarlariniAktar: true);
  aktifCalisma?.value?.girisYap();
  aktifCalisma?.value?.konumKaynak = KonumKaynak.KONUM;
  aktifCalisma?.refresh();
}

// Konum bazli cikis
if (actionId == "com.fikoyt.mesaici.komut.konum.cikis.evet") {
  aktifCalisma?.value?.cikisYap();
  aktifCalisma?.refresh();
}
```

**Bagimlilik:** Adim 5, Adim 12

---

## Adim 14: Bildirim Callback Genisletme

**Dosya (degisiklik):** `lib/apps/mesaici/servisler/mesaici.background/mesaici.background.dart`

`notificationTapBackground` fonksiyonuna yeni action handler'lar:

```dart
if (notificationResponse.actionId == "com.fikoyt.mesaici.komut.konum.giris.evet") { ... }
if (notificationResponse.actionId == "com.fikoyt.mesaici.komut.konum.giris.hayir") { ... }
if (notificationResponse.actionId == "com.fikoyt.mesaici.komut.konum.giris.ertele") { ... }
if (notificationResponse.actionId == "com.fikoyt.mesaici.komut.konum.cikis.evet") { ... }
if (notificationResponse.actionId == "com.fikoyt.mesaici.komut.konum.cikis.hayir") { ... }
```

**Bagimlilik:** Adim 12, Adim 13

---

## Adim 15: Ayarlar UI - Isyeri Tanimlama Sayfasi

**Dosya (yeni):** `lib/apps/mesaici/pages/ayarlar/konum_takip/isyeri_tanimlama.dart`

Sayfa icerigi:
- Tanimli isyerlerinin listesi (Card ile, her birinde ad/ikon/konum/yaricap ozeti)
- Isyeri ekleme butonu (FAB veya Card)
- Isyeri silme (slide-to-delete veya uzun basma)
- Isyeri duzenle (tiklama ile)

Mevcut pattern: `mesaici_ayarlar.dart` sayfasindaki `FikoYTSliverApp` + `Card` + `ListTile` yapisi kullanilacak.

**Bagimlilik:** Adim 2, Adim 4

---

## Adim 16: Ayarlar UI - Isyeri Ekleme/Duzenleme Dialog

**Dosya (yeni):** `lib/apps/mesaici/pages/ayarlar/konum_takip/isyeri_dialog.dart`

Dialog icerigi:
1. **Isyeri adi** - TextField
2. **Ikon secimi** - Emoji picker veya hazir ikon listesi (fabrika, ofis, saha vb.)
3. **Harita picker** - `GoogleMap` widget, kullanici haritada pin koyar veya mevcut konumunu kullanir
   - Mevcut konumu goster butonu (`geolocator` ile)
   - Haritada tiklayarak konum secme
4. **Yaricap ayari** - Slider (50m - 500m), haritada daire olarak gosterme
5. **WiFi SSID** - Opsiyonel TextField + "Mevcut WiFi'yi Kullan" butonu (`wifi_scan` ile mevcut ag adini otomatik doldurma)
6. **Kaydet/Iptal** butonlari

Mevcut dialog pattern'i: `vardiye_ekle_dialog.dart`, `mola_dialog.dart` gibi `showDialog` + `AlertDialog` yapisi.

**Bagimlilik:** Adim 1, Adim 2, Adim 10, Adim 11

---

## Adim 17: Ayarlar UI - Konum Takip Modu Secimi

**Dosya (yeni):** `lib/apps/mesaici/pages/ayarlar/konum_takip/konum_takip_ayarlari.dart`

Sayfa icerigi:
- **Konum takip modu secimi** - Radio butonlar veya SegmentedButton:
  - Manuel (mevcut)
  - Yari Otomatik (bildirimle onay)
  - Tam Otomatik (otomatik giris/cikis)
- **Gece modu** - Switch (00:00-05:00 arasi pasif)
- **WiFi dogrulama** - Switch (geofence tetiklenince WiFi kontrol)
- **Pil kullanimi bilgisi** - Bilgilendirme karti
- **Izin durumu** - Konum izni verilmis mi gostergesi + yeniden izin isteme butonu

Mod degistiginde:
- `MANUEL` disina geciste izin kontrolu yapilmali
- Izin yoksa `izinAciklamaDialoguGoster` cagrilmali

**Bagimlilik:** Adim 3, Adim 4, Adim 11

---

## Adim 18: Ayarlar Ana Sayfasina Konum Takip Kartlari Ekleme

**Dosya (degisiklik):** `lib/apps/mesaici/pages/ayarlar/mesaici_ayarlar.dart`

"Maas Parametreleri" kartindan sonra (veya "Calisma Sureleri" kartinin altina) yeni kartlar:

```dart
Card(
  child: ListTile(
    leading: Text("📍", style: TextStyle(fontSize: 24)),
    title: Text('Konum Takip Ayarlari'),
    subtitle: Text('Otomatik Mesai Takip Modunu Secin'),
    trailing: Icon(Icons.chevron_right_sharp),
    onTap: () => context.vRouter.to("/mesaici/ayarlar/konum-takip"),
  ),
),
Card(
  child: ListTile(
    leading: Text("🏢", style: TextStyle(fontSize: 24)),
    title: Text('Isyeri Tanimlari'),
    subtitle: Text('Isyerlerinizi Haritadan Tanimlayin'),
    trailing: Icon(Icons.chevron_right_sharp),
    onTap: () => context.vRouter.to("/mesaici/ayarlar/isyeri-tanimlama"),
  ),
),
```

**Bagimlilik:** Adim 15, Adim 17

---

## Adim 19: Route Tanimlari Ekleme

**Dosya (degisiklik):** `lib/routes.dart`

Yeni route'lar:

```dart
VWidget(
  path: '/mesaici/ayarlar/konum-takip',
  widget: const BasePageMesaici(child: PageKonumTakipAyarlari()),
),
VWidget(
  path: '/mesaici/ayarlar/isyeri-tanimlama',
  widget: const BasePageMesaici(child: PageIsyeriTanimlama()),
),
```

Import'lar eklenmesi.

**Bagimlilik:** Adim 15, Adim 17

---

## Adim 20: Uygulama Ayarlarindan Konum Bildirim Switchleri Ekleme

**Dosya (degisiklik):** `lib/apps/mesaici/pages/ayarlar/uygulama_ayarlari.dart`

"Bildirim Ayarlari" bolumune (mevcut "Ise Baslama Bildirimleri" ve "Isi Bitirme Bildirimleri" switchlerinin altina):

```dart
ListTile(
  leading: Text("📍", ...),
  title: Text('Konum Giris Bildirimleri'),
  subtitle: Switch(konumGirisBildirimleri),
),
ListTile(
  leading: Text("📍", ...),
  title: Text('Konum Cikis Bildirimleri'),
  subtitle: Switch(konumCikisBildirimleri),
),
```

**Bagimlilik:** Adim 6

---

## Adim 21: Android Manifest Izinleri

**Dosya (degisiklik):** `android/app/src/main/AndroidManifest.xml`

Eklenmesi gereken izinler:

```xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
```

Google Maps API key eklenmesi:
```xml
<meta-data
  android:name="com.google.android.geo.API_KEY"
  android:value="GOOGLE_MAPS_API_KEY"/>
```

**Bagimlilik:** Adim 1

---

## Adim 22: build_runner Calistirma

Tum model degisiklikleri tamamlandiktan sonra:

```bash
cd flutter/fikoyt_mesaici
dart run build_runner build --delete-conflicting-outputs
```

Bu adim `.g.dart` dosyalarini yeniden uretecek:
- `model_ayarlar.g.dart`
- `calisma_kayit.g.dart`
- `model_hareketler.g.dart`

**Bagimlilik:** Adim 2, 3, 4, 5, 6 (tum model degisiklikleri)

---

## Adim 23: FikoYTMesaiciService'e Konum Servisleri Entegrasyonu

**Dosya (degisiklik):** `lib/apps/mesaici/servisler/fikoyt.mesaici.service.dart`

`init()` metoduna ekleme:
```dart
if (!Platform.isWindows) {
  if (ayarlarModel?.value.konumAyarlari.mod != KonumTakipModu.MANUEL) {
    // GeofenceService baslatma
    // Izin kontrolu
  }
}
```

`arkaPlanServisInit()` metodundaki `AndroidConfiguration`'a foreground service type ekleme:
```dart
foregroundServiceTypes: [
  AndroidForegroundType.specialUse,
  AndroidForegroundType.location,  // yeni
],
```

**Bagimlilik:** Adim 8, 9, 10, 11, 12

---

## Uygulama Sirasi (Bagimlilik Sirasina Gore)

```
Grup 1 (Paralel - Bagimsiz):
  Adim 1  - Paket bagimliliklari
  Adim 21 - Android manifest izinleri

Grup 2 (Paralel - Modeller):
  Adim 2  - Isyeri modeli
  Adim 5  - CalismaKayit konumKaynak alani
  Adim 6  - BildirimAyarlari konum alanlari
  Adim 7  - AktifDurum enum genisletme

Grup 3 (Sirasyla - Model bagimliliklari):
  Adim 3  - KonumAyarlari (Adim 2'ye bagimli)
  Adim 4  - ModelAyarlar genisletme (Adim 2, 3'e bagimli)
  Adim 22 - build_runner (tum modeller tamamlaninca)

Grup 4 (Paralel - Servisler):
  Adim 8  - GeofenceService
  Adim 9  - WiFiService
  Adim 11 - KonumIzinYonetici

Grup 5 (Sirasyla - Servis entegrasyonu):
  Adim 10 - IsyeriService (Adim 8'e bagimli)
  Adim 12 - Background service genisletme (Adim 8, 9'a bagimli)
  Adim 13 - Intent yonetimi genisletme
  Adim 14 - Bildirim callback genisletme
  Adim 23 - FikoYTMesaiciService entegrasyonu

Grup 6 (Paralel - UI):
  Adim 15 - Isyeri tanimlama sayfasi
  Adim 16 - Isyeri dialog
  Adim 17 - Konum takip modu sayfasi
  Adim 20 - Bildirim switchleri

Grup 7 (Son - Route & Navigasyon):
  Adim 18 - Ayarlar ana sayfasi kartlari
  Adim 19 - Route tanimlari
```

---

## Dosya Ozet Haritasi

### Yeni Dosyalar (7)
| Dosya | Icerik |
|-------|--------|
| `lib/apps/mesaici/model/isyeri/isyeri.dart` | Isyeri Isar embedded modeli |
| `lib/apps/mesaici/model/konum/konum_ayarlari.dart` | KonumAyarlari + KonumTakipModu |
| `lib/apps/mesaici/servisler/konum/geofence_service.dart` | Geofence yonetimi |
| `lib/apps/mesaici/servisler/konum/wifi_service.dart` | WiFi SSID tarama |
| `lib/apps/mesaici/servisler/konum/isyeri_service.dart` | Isyeri CRUD |
| `lib/apps/mesaici/servisler/konum/konum_izin_yonetici.dart` | Izin yonetimi |
| `lib/apps/mesaici/pages/ayarlar/konum_takip/isyeri_tanimlama.dart` | Isyeri listesi UI |
| `lib/apps/mesaici/pages/ayarlar/konum_takip/isyeri_dialog.dart` | Isyeri ekleme/duzenleme dialog |
| `lib/apps/mesaici/pages/ayarlar/konum_takip/konum_takip_ayarlari.dart` | Mod secimi UI |

### Degistirilecek Dosyalar (9)
| Dosya | Degisiklik |
|-------|-----------|
| `pubspec.yaml` | 4 yeni paket |
| `lib/apps/mesaici/model/ayarlar/model_ayarlar.dart` | KonumAyarlari alani + BildirimAyarlari alanlari |
| `lib/apps/mesaici/model/calisma_kayit/calisma_kayit.dart` | KonumKaynak enum + alan |
| `lib/apps/mesaici/servisler/mesaici.background/aktif_durum.dart` | 9 yeni enum degeri |
| `lib/apps/mesaici/servisler/mesaici.background/mesaici.background.dart` | Geofence listener + karar motoru + bildirim callback |
| `lib/apps/mesaici/servisler/fikoyt.mesaici.service.dart` | Intent handler + servis baslangici |
| `lib/apps/mesaici/pages/ayarlar/mesaici_ayarlar.dart` | 2 yeni kart |
| `lib/apps/mesaici/pages/ayarlar/uygulama_ayarlari.dart` | 2 yeni switch |
| `lib/routes.dart` | 2 yeni route |
| `android/app/src/main/AndroidManifest.xml` | Izinler + API key |

---

## Riskler ve Dikkat Edilecekler

1. **Isar versiyon uyumu:** Proje Isar 3.1.0+1 kullaniyor. `@embedded` siniflar icindeki `List<Isyeri>` gibi yapilar Isar 3.x ile sorunsuz calisir, ancak `build_runner` sonrasi `.g.dart` ciktilarini dogrulamak gerekir.

2. **Background service'de geofence:** `flutter_background_service` + `geofencing_api` birlikte calisirken pil optimizasyonu kritik. Geofence API zaten OS seviyesinde calistigi icin ek pil tuketimi minimal olmali.

3. **Google Maps API Key:** Harita picker icin Google Maps API key gerekli. Bu key'in `AndroidManifest.xml`'e ve gerekirse iOS `Info.plist`'e eklenmesi lazim.

4. **WiFi tarama izni:** Android 13+ icin WiFi tarama `NEARBY_WIFI_DEVICES` izni gerektirebilir. `permission_handler` ile yonetilmeli.

5. **Arka plan konum izni:** Android 11+ icinde `ACCESS_BACKGROUND_LOCATION` ayri bir adimda istenmeli (once foreground, sonra background). Kullaniciya aciklayici dialog gosterilmeli.

6. **Mevcut otomatik giris/cikis ile catisma:** `saatGeldigindeOtomatikGirisYap` / `saatGeldigindeOtomatikCikisYap` mevcut ayarlar ile konum bazli otomatik takip arasinda oncelik belirlemek gerekir. Onerilen: Konum bazli tetikleme varsa saat bazli otomatik giris/cikis devre disi birakilmali.
