package com.rn.amapmodule;

import android.content.Context;
import android.util.Log;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationClientOption.AMapLocationMode;
import com.amap.api.location.AMapLocationListener;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.WritableMap;

/**
 * Created by yf on 2018/2/24.
 */

public class YFAmapLocation implements AMapLocationListener{
    
    private static final String ERROR_2 = "-1002";//定位错误
    private static final String ERROR_3 = "-1003";//逆地理位置错误
    private static final String ERROR_6 = "-1006";//定位经纬度为0
    
    
    private AMapLocationClient locationClient = null;
    private AMapLocationClientOption locationOption = null;
    
    private Promise locationPromise = null;
    
    
    YFAmapLocation(Context context){
        this.locationClient = new AMapLocationClient(context);
        this.locationOption = new AMapLocationClientOption();
        
        this.locationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
        this.locationOption.setOnceLocation(true);
        this.locationOption.setOnceLocationLatest(true);
        this.locationOption.setLocationCacheEnable(false);
        this.locationClient.setLocationOption(this.locationOption);
        this.locationClient.setLocationListener(this);
    }
    
    
    
    @Override
    public void onLocationChanged(AMapLocation aMapLocation) {
        if (aMapLocation != null){
            WritableMap map = Arguments.createMap();
            
            double longitude = aMapLocation.getLongitude();
            double latitude = aMapLocation.getLatitude();
            
            if (0 == latitude || 0 == longitude){
                
                this.locationPromise.reject(ERROR_6,"经纬度信息为0");
                return;
            }
            
            map.putDouble("longitude",longitude);
            map.putDouble("latitude",latitude);
            
            
            String country = null == aMapLocation.getCountry() ? "":aMapLocation.getCountry();
            String province = null == aMapLocation.getProvince() ? "":aMapLocation.getProvince();
            String city = null == aMapLocation.getCity() ? "":aMapLocation.getCity();
            String district = null == aMapLocation.getDistrict() ? "":aMapLocation.getDistrict();
            String adcode = null == aMapLocation.getAdCode() ? "":aMapLocation.getAdCode();
            String street = null == aMapLocation.getStreet() ? "":aMapLocation.getStreet();
            
            map.putString("country",country);
            map.putString("province",province);
            map.putString("city",city);
            map.putString("district",district);
            map.putString("adcode",adcode);
            map.putString("street",street);
            
            this.locationPromise.resolve(map);
        }else {
            this.locationPromise.reject(ERROR_2,"定位错误");
        }
    }
    
    
    public void startLocation(Promise promise){
        this.locationPromise = promise;
        this.locationClient.startLocation();
    }
    
    public void startRegeocode(Promise promise){
        
    }
    
    public void stopLocation(Promise promise){
        this.locationClient.stopLocation();
    }
    
}

