import type { PluginListenerHandle } from '@capacitor/core'; // export interface SatelliteStatus { // satellitesInView: number; // usedInFix: number; // constellationCounts: { [key: string]: number }; // } // export interface WifiAp { // ssid: string; // bssid: string; // rssi: number; // distance?: number; // } // export interface WifiScanResult { // apCount: number; // aps: WifiAp[]; // } // export interface ImuData { // accelX: number; // accelY: number; // accelZ: number; // gyroX: number; // gyroY: number; // gyroZ: number; // speed?: number; // acceleration?: number; // directionRad?: number; // } // export interface GpsData { // latitude: number; // longitude: number; // accuracy: number; // satellitesInView?: number; // usedInFix?: number; // constellationCounts?: { [key: string]: number }; // } // export interface PositioningData { // source: 'GNSS' | 'WIFI' | 'FUSED' | 'MOCK'; // timestamp: number; // latitude: number; // longitude: number; // accuracy: number; // gnssData?: SatelliteStatus; // wifiData?: WifiAp[]; // imuData?: ImuData; // } export interface PositioningData { source: 'GNSS' | 'WIFI' | 'FUSED' | 'MOCK'; timestamp: number; latitude: number; longitude: number; accuracy: number; speed: number; acceleration: number; directionRad: number; isMocked: boolean; mode: 'normal' | 'driving'; predicted?: boolean; } export interface SatelliteStatus { satellitesInView: number; usedInFix: number; constellationCounts: { [key: string]: number }; } export interface DumonGeoOptions { distanceThresholdMeters?: number; speedChangeThreshold?: number; directionChangeThreshold?: number; emitDebounceMs?: number; drivingEmitIntervalMs?: number; wifiScanIntervalMs?: number; enableWifiRtt?: boolean; enableLogging?: boolean; enableForwardPrediction?: boolean; maxPredictionSeconds?: number; emitGnssStatus?: boolean; suppressMockedUpdates?: boolean; keepScreenOn?: boolean; backgroundPollingIntervalMs?: number; // Android background polling interval backgroundPostMinDistanceMeters?: number; // Android background min distance to post backgroundPostMinAccuracyMeters?: number; // Android background min acceptable accuracy for POST (meters) backgroundMinPostIntervalMs?: number; // Android background minimum interval between POST attempts } export interface PermissionStatus { location: 'granted' | 'denied'; wifi: 'granted' | 'denied'; } export interface DumonGeolocationPlugin { startPositioning(): Promise; stopPositioning(): Promise; getLatestPosition(): Promise; checkAndRequestPermissions(): Promise; setOptions(options: DumonGeoOptions): Promise; getGnssStatus(): Promise; getLocationServicesStatus(): Promise<{ gpsEnabled: boolean; networkEnabled: boolean }>; // Background tracking (Android) startBackgroundTracking(options?: { title?: string; text?: string; channelId?: string; channelName?: string; postUrl?: string; // optional: service will POST latest fixes here as JSON }): Promise; stopBackgroundTracking(): Promise; isBackgroundTrackingActive(): Promise<{ active: boolean }>; getBackgroundLatestPosition(): Promise; openBackgroundPermissionSettings(): Promise; openNotificationPermissionSettings(): Promise; // Auth token management for background posting setAuthTokens(tokens: { accessToken: string; refreshToken: string }): Promise; clearAuthTokens(): Promise; getAuthState(): Promise<{ present: boolean }>; setBackgroundPostUrl(options: { url?: string }): Promise; getBackgroundPostUrl(): Promise<{ url: string | null }>; configureEdgeToEdge(options: { bgColor: string; style: 'DARK' | 'LIGHT'; overlay?: boolean; }): Promise; setGpsMode(options: { mode: 'normal' | 'driving' }): Promise; addListener( eventName: 'onPositionUpdate', listenerFunc: (data: PositioningData) => void ): PluginListenerHandle; addListener( eventName: 'onGnssStatus', listenerFunc: (data: SatelliteStatus) => void ): PluginListenerHandle; }