package com.qianmi.hardwarekit.scancode;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.annotation.Nullable;
import android.util.Log;

import com.facebook.react.bridge.Arguments;
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.modules.core.DeviceEventManagerModule;


/**
 * Created by xiayinglin on 2017/4/13.
 */
public class ScanCodeModule extends ReactContextBaseJavaModule {

    public final static String ACTION_SCAN_CODE = "scanCode.action";
    public final static String KEY_SCAN_CODE = "code";

    private ScanCodeReceiver mScanCodeReceiver;

    public ScanCodeModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    @ReactMethod
    public void create(/*final Callback callback*/) {
        Log.d(this.getName(), "create scanner code notify");
        mScanCodeReceiver = new ScanCodeReceiver();

        this.getReactApplicationContext().registerReceiver(mScanCodeReceiver, new IntentFilter(ACTION_SCAN_CODE));
    }

    @ReactMethod
    public void destroy() {
        if(null != mScanCodeReceiver) {
            this.getReactApplicationContext().unregisterReceiver(mScanCodeReceiver);
            this.mScanCodeReceiver = null;
        }
    }

    @ReactMethod
    public void clean() {
       Cache.clean();
    }


    @Override
    public String getName() {
        return "ScanCode";
    }

    class ScanCodeReceiver extends BroadcastReceiver {


        ScanCodeReceiver() {
        }

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(ACTION_SCAN_CODE)) {
                String c = intent.getStringExtra(KEY_SCAN_CODE);
//                ScanCodeModule.this.codeNotify.result(c);
                WritableMap param = Arguments.createMap();
                param.putString("value", c);
                ScanCodeModule.this.event(KEY_SCAN_CODE, param);
                Log.d("ScanCodeModule", "onReceive: " + c);
            }

        }
    }


    protected void event(String eventName, @Nullable WritableMap params) {
        if (null != this.getReactApplicationContext()) {
            if (null == params) {
                params = Arguments.createMap();
            }
            Log.d(this.getClass().getSimpleName(), "event -> name: " + eventName);
            this.getReactApplicationContext()
                    .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                    .emit(eventName, params);
        }
    }


   /* interface CodeNotify {
        void result(String code);
    }*/
}
