// Copyright 2015-present 650 Industries. All rights reserved.

#import <CoreLocation/CLLocation.h>
#import <CoreLocation/CLLocationManager.h>

#import <UMCore/UMEventEmitter.h>
#import <UMCore/UMExportedModule.h>
#import <UMCore/UMAppLifecycleListener.h>
#import <UMCore/UMModuleRegistryConsumer.h>

// Location accuracies
typedef NS_ENUM(NSUInteger, EXLocationAccuracy) {
  EXLocationAccuracyLowest = 1,
  EXLocationAccuracyLow = 2,
  EXLocationAccuracyBalanced = 3,
  EXLocationAccuracyHigh = 4,
  EXLocationAccuracyHighest = 5,
  EXLocationAccuracyBestForNavigation = 6,
};

// Geofencing event types
typedef NS_ENUM(NSUInteger, EXGeofencingEventType) {
  EXGeofencingEventTypeEnter = 1,
  EXGeofencingEventTypeExit = 2,
};

// Geofencing region states
typedef NS_ENUM(NSUInteger, EXGeofencingRegionState) {
  EXGeofencingRegionStateUnknown = 0,
  EXGeofencingRegionStateInside = 1,
  EXGeofencingRegionStateOutside = 2,
};

@interface EXLocation : UMExportedModule <UMAppLifecycleListener, UMEventEmitter, UMModuleRegistryConsumer>

+ (NSDictionary *)exportLocation:(CLLocation *)location;
+ (CLLocationAccuracy)CLLocationAccuracyFromOption:(EXLocationAccuracy)accuracy;
+ (CLActivityType)CLActivityTypeFromOption:(NSInteger)activityType;

@end