package com.smf.location;

import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.facebook.react.bridge.ActivityEventListener;
import com.facebook.react.bridge.BaseActivityEventListener;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.WritableNativeMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;

public class CityModule extends ReactContextBaseJavaModule {
    public AMapLocationClient mLocationClient = null;
    public AMapLocationListener mLocationListener;
    public AMapLocationClientOption mLocationOption = null;
    Callback callback;
    private final ActivityEventListener mActivityEventListener = new BaseActivityEventListener(){
        @Override
        public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
            super.onActivityResult(activity, requestCode, resultCode, data);
            if(requestCode == 200) {
                if (resultCode == getCurrentActivity().RESULT_OK) {
                    callback.invoke(0,data.getExtras().getString("city"),data.getExtras().getString("zip"));
                }
            }
        }
    };
    public CityModule(ReactApplicationContext reactContext) {
        super(reactContext);
        reactContext.addActivityEventListener(mActivityEventListener);
    }

    @Override
    public String getName() {
        return "RNSFLocation";
    }
    @ReactMethod
    public void chooseCity(Callback callback){
        Intent intent = new Intent(getReactApplicationContext(),CityActivity.class);
        getCurrentActivity().startActivityForResult(intent,200);
        this.callback = callback;
    }
    @ReactMethod
    public void initLocation(String appkey){

    }
    @ReactMethod
    public void getLocation(){
        mLocationListener = new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation aMapLocation) {
                WritableMap map = new WritableNativeMap();
                map.putString("city", aMapLocation.getCity());
                map.putString("cityCode", "" + aMapLocation.getCityCode());
                map.putString("latitude", "" + aMapLocation.getLatitude());
                map.putString("longitude", "" + aMapLocation.getLongitude());
                getReactApplicationContext()
                        .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                        .emit("locationListener", map);
                mLocationClient.stopLocation();
            }
        };
        mLocationClient = new AMapLocationClient(getReactApplicationContext());
        mLocationClient.setLocationListener(mLocationListener);
        mLocationOption = new AMapLocationClientOption();
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        mLocationOption.setOnceLocation(true);
        mLocationOption.setOnceLocationLatest(true);
        mLocationOption.setNeedAddress(true);
        mLocationOption.setLocationCacheEnable(true);
        mLocationClient.setLocationOption(mLocationOption);
        mLocationClient.startLocation();
    }
}
