package com.ai.ced.bluetooth;

import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.PluginResult;
import org.json.JSONException;
import org.json.JSONObject;

import java.lang.ref.WeakReference;

import cn.com.senter.helper.ConsantHelper;

import cn.com.senter.sdkdefault.helper.Error;


public class HandlerSenter extends Handler {

  private WeakReference<Activity> reference;

  private CallbackContext normalCallbackContext;


  public HandlerSenter(Activity activity, CallbackContext normalCallbackContext) {

    reference = new WeakReference<Activity>(activity);

    this.normalCallbackContext = normalCallbackContext;


  }

  public void handleMessage(Message msg) {
    try {
      Activity mainActivity = (Activity) reference.get();
      if (mainActivity != null) {
        String str = "";
        switch (msg.what) {
          case ConsantHelper.READ_CARD_SUCCESS:
            break;
          case ConsantHelper.SERVER_CANNOT_CONNECT:
            Log.i("", "服务器连接失败! 请检查网络。");
            str = "服务器连接失败! 请检查网络。";
            if (normalCallbackContext != null)
              sendRespmsg("6005", str, normalCallbackContext);
            break;

          case ConsantHelper.READ_CARD_FAILED:
            Log.i("", "无法读取信息请重试!");
            str = "无法读取信息请重试!";
            if (normalCallbackContext != null)
              sendRespmsg("6005", str, normalCallbackContext);
            //zl  ButtondefDrawable();
            break;
          case ConsantHelper.READ_CARD_WARNING:
//				 String str = (String)msg.obj;
//
//                 if(str.indexOf("card")>-1){
//                     activity.tv_info.setText("读卡失败: 卡片丢失,或读取错误!");
//                 }else{
//                     String[] datas = str.split(":");
//
//                     activity.tv_info.setText("网络超时 错误码: "+ Integer.toHexString(new Integer(datas[1])));
//                 }
            //activity.tv_info.setText("请移动卡片在合适位置!");

            //zl   ButtondefDrawable();
            break;
          case ConsantHelper.READ_CARD_PROGRESS:

            int progress_value = (Integer) msg.obj;

            Log.i("", "正在读卡......");//,进度：+ progress_value + "%"
            str = "正在读卡......";
            //if (normalCallbackContext != null)
            // sendRespmsg("0000", str, normalCallbackContext);
            break;
          case ConsantHelper.READ_CARD_START:
            //zl  activity.resetUI();
            Log.i("", "正在读卡......");
            str = "正在读卡......";
            //if (normalCallbackContext != null)
            //  sendRespmsg("0001", str, normalCallbackContext);
            break;
          case Error.ERR_CONNECT_SUCCESS:
            String devname = (String) msg.obj;
            Log.i("", devname + "连接成功!");
            //mtv_info1.setText("成功:" + String.format("%d", totalcount) + " 失败:" + String.format("%d", failecount));
            str = devname + "连接成功!";
            if (normalCallbackContext != null)
//                    sendRespmsg("0000", str, readcardCallbackContext);
              break;
          case Error.ERR_CONNECT_FAILD:
            String devname1 = (String) msg.obj;
            Log.i("", devname1 + "连接失败!");
            //mtv_info1.setText("成功:" + String.format("%d", totalcount) + " 失败:" + String.format("%d", failecount));
            str = devname1 + "连接失败!";
            if (normalCallbackContext != null)
              sendRespmsg("6005", str, normalCallbackContext);
            break;
          case Error.ERR_CLOSE_SUCCESS:
            Log.i("", (String) msg.obj + "断开连接成功");
            str = (String) msg.obj + "断开连接成功!";
//                  if (normalCallbackContext != null)
//                    sendRespmsg("6005", str, readcardCallbackContext);
            break;
          case Error.ERR_CLOSE_FAILD:
            Log.i("", (String) msg.obj + "断开连接失败");
            str = (String) msg.obj + "断开连接失败!";
//                  if (normalCallbackContext != null)
//                    sendRespmsg("6005", str, normalCallbackContext);
            break;
          case Error.RC_SUCCESS:
            String devname12 = (String) msg.obj;
            Log.i("", devname12 + "连接成功!");
            str = devname12 + "连接成功!";
//                  if (readcardCallbackContext != null)
//                    sendRespmsg("0000", str, readcardCallbackContext);
            break;

        }
      }
    }catch(Exception e)
    {
      e.printStackTrace();
      System.out.println("MyHandler..."+e.getMessage());
    }
  }


  /**
   * JSOM字段赋值
   */
  public void sendRespmsg(String respCode, String respDesc, CallbackContext normalCallbackContext) {
    try {
      Log.d("BluetoothDevicePlugin", "sendRespInfo......" + respDesc+"-"+respCode);
      System.out.println("callbackContext......" + respDesc+"-"+respCode);
      JSONObject resp = new JSONObject();
      resp.put("respCode", respCode);
      resp.put("respDesc", respDesc);
      sendRespInfo(resp, normalCallbackContext);
    } catch (JSONException e) {
      e.printStackTrace();
    }
  }

  /**
   * 返回消息给前端，这边全都算做success，只是通过respCode来区分是否成功
   * 返回的是json字符串，跟ios统一
   *
   * @param resp
   * @param callbackContext
   */
  private void sendRespInfo(JSONObject resp, CallbackContext callbackContext) {
    String message = resp.toString(); //json转换成字符串
    Log.d("BluetoothDevicePlugin", "sendRespInfo......" + message);
    System.out.println("callbackContext......" + callbackContext);
    System.out.println("sendRespInfo......" + message);
    //成功回调
    //callbackContext.success(message);

    //为了一次调用能多次返回结果给前端，得用下面的方式返回结果,
    //PluginResult plugin = new PluginResult(PluginResult.Status.OK, message);
    PluginResult plugin = new PluginResult(PluginResult.Status.OK, resp);
    plugin.setKeepCallback(true);
    callbackContext.sendPluginResult(plugin);
  }


}
