# BiznisPortal Partner Capacitor Wrapper

## Šta je završeno u Sprint D

Sprint D uvodi `Capacitor wrapper` preko postojećeg `BiznisPortal Partner` portala. Time zadržavamo isti web kod, ali dobijamo:

- Android i iOS projekte u repozitorijumu
- native registraciju push tokena
- native kameru i galeriju iz Partner App-a
- deep link otvaranje sekcija iz push poruka i app link-ova
- i dalje zadržavamo PWA kao fallback

Važno: ovaj wrapper koristi `remote server` model, što je ispravno za postojeći Next.js SSR portal. Ne pravimo lažni statički bundle za aplikaciju koja zavisi od server renderinga i API ruta.

## Ključne env promenljive

Dodajte ili podesite sledeće:

```env
CAPACITOR_SERVER_URL="https://www.biznisportal.rs"
CAPACITOR_APP_ID="rs.biznisportal.partner"
CAPACITOR_APP_NAME="BiznisPortal Partner"

NOTIFICATIONS_NATIVE_PUSH_ENABLED="true"
NOTIFICATIONS_NATIVE_PUSH_WEBHOOK_URL="https://your-push-gateway.example.com/send"
NEXT_PUBLIC_NATIVE_PUSH_ENABLED="true"
```

`CAPACITOR_SERVER_URL` treba da pokazuje na javno dostupan URL portala. Za lokalni emulator možete koristiti `http://localhost:3000`, ali za fizički telefon treba javna adresa ili tunel.

Za potpuni release i signing setup pogledajte i:

- `/docs/biznisportal-partner-mobile-release.md`

## NPM komande

```bash
npm run cap:add:android
npm run cap:add:ios
npm run cap:sync
npm run cap:open:android
npm run cap:open:ios
```

## Android

Android projekat je u:

- `android/`

Za native push:

1. Uzmite `google-services.json` iz Firebase projekta
2. Stavite ga u:
   - `android/app/google-services.json`
3. Zatim pokrenite:

```bash
npm run cap:sync
npm run cap:open:android
```

Push plugin je već povezan sa Gradle konfiguracijom. Ako `google-services.json` ne postoji, Android build i dalje postoji, ali push neće raditi.

## iOS

iOS projekat je u:

- `ios/App/App.xcodeproj`

Za native push:

1. Uzmite `GoogleService-Info.plist` iz Firebase projekta ako koristite FCM gateway za iOS
2. Dodajte ga u Xcode target `App`
3. Uključite:
   - `Push Notifications`
   - `Background Modes -> Remote notifications`

`AppDelegate.swift` je već pripremljen za registraciju remote notification tokena i prosleđivanje Capacitor push plugin-u.

## Native push tok

Partner App sada čuva:

- web push subscription za PWA
- FCM/APNS token za Capacitor wrapper

Backend delivery sada radi u tri režima:

- `web-push` za browser/PWA uređaje
- `native direct` za Android/iOS wrapper uređaje preko ugrađene `FCM/APNS` isporuke
- `native-push-webhook` za Android/iOS wrapper uređaje ako želite eksterni gateway

To se podešava kroz:

- `notifications.nativePushEnabled`
- `notifications.nativePushMode`
- za `direct`:
  - `notifications.fcmProjectId`
  - `notifications.fcmClientEmail`
  - `notifications.fcmPrivateKey`
  - `notifications.apnsKeyId`
  - `notifications.apnsTeamId`
  - `notifications.apnsPrivateKey`
  - `notifications.apnsBundleId`
- za `webhook`:
  - `notifications.nativePushWebhookUrl`

## Kamera i galerija

Partner zahtev za slanje materijala sada radi u oba režima:

- web/PWA: input + camera capture iz browsera
- Capacitor: native `Camera.getPhoto()` i `Camera.pickImages()`

Dokumenti ostaju kroz standardni file picker, što je dovoljno za Partner App tok u ovoj fazi.

## Deep link ponašanje

Native push i app link-ovi mogu da vode na:

- `/portal#analitika`
- `/portal#naplata`
- `/portal#zahtevi`
- `/portal#notifikacije`

Partner App sluša otvaranje URL-a i notification action event, pa korisnik iz push poruke može odmah na odgovarajuću sekciju.

## Šta ostaje spolja zavisno

Ovo je implementirano u kodu, ali zavisi od produkcionog okruženja:

- pravi Firebase / APNS kredencijali
- `google-services.json`
- `GoogleService-Info.plist`
- native push gateway URL ako koristite webhook režim
- finalni signing za Android/iOS build

Bez toga Sprint D je funkcionalno spreman u kodu i wrapper projektima, ali nije moguće garantovati realan produkcioni push round-trip.
