package com.reactnative.rtctxim.module;

import android.content.Context;
import android.widget.Toast;

import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.WritableMap;
import com.reactnative.rtctxim.business.InitializeBusiness;
import com.tencent.imsdk.log.QLog;
import com.tencent.imsdk.v2.V2TIMCallback;
import com.tencent.imsdk.v2.V2TIMConversation;
import com.tencent.imsdk.v2.V2TIMConversationListener;
import com.tencent.imsdk.v2.V2TIMManager;
import com.tencent.imsdk.v2.V2TIMUserFullInfo;
import com.tencent.imsdk.v2.V2TIMValueCallback;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Nonnull;

public class InitializeModule extends BaseModule {

  private Context context;

  public InitializeModule(ReactApplicationContext reactContext) {
    super(reactContext);
    this.context = reactContext;
  }

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

  @ReactMethod
  public void login(String account, String userSig, Promise promise) {
    final WritableMap map = Arguments.createMap();
    InitializeBusiness.login(account, userSig, new V2TIMCallback() {

      @Override
      public void onError(int errCode, String errMsg) {
        //错误码 errCode 和错误描述 errMsg，可用于定位请求失败原因
        //错误码 errCode 列表请参见错误码表
        map.putInt("code", errCode);
        map.putString("msg", errMsg);

        Toast.makeText(getReactApplicationContext(), String.valueOf(errCode), Toast.LENGTH_SHORT).show();
        QLog.e("登录信息", "code:" + errCode + "    " + "msg:" + errMsg);
        promise.reject(errCode + "", errMsg);
      }

      @Override
      public void onSuccess() {
        map.putInt("code", 0);
        map.putString("msg", "登录成功!");
        setConversationLinster();
        promise.resolve(map);
      }
    });
  }

  @ReactMethod
  public void logout(Promise promise) {
    V2TIMManager.getInstance().logout(new V2TIMCallback() {
      @Override
      public void onError(int i, String s) {
        promise.reject(String.valueOf(i), s);
      }

      @Override
      public void onSuccess() {
        promise.resolve(true);
      }
    });
  }

  @ReactMethod
  public void getUsersInfo(ReadableArray userIds, Promise promise) {
    ArrayList<String> models = new ArrayList<String>();
    for (int i = 0; i < userIds.size(); i++) {
      models.add(userIds.getString(i));
    }
    V2TIMManager.getInstance().getUsersInfo(models, new V2TIMValueCallback<List<V2TIMUserFullInfo>>() {
      @Override
      public void onError(int i, String s) {
        promise.reject("", s);
      }

      @Override
      public void onSuccess(List<V2TIMUserFullInfo> v2TIMUserFullInfos) {
        promise.resolve(Arguments.createMap());
      }
    });
  }

  public void setConversationLinster(){
    V2TIMManager.getConversationManager().setConversationListener(new V2TIMConversationListener() {
      @Override
      public void onSyncServerStart() {
        super.onSyncServerStart();
      }

      @Override
      public void onSyncServerFinish() {
        super.onSyncServerFinish();
      }

      @Override
      public void onSyncServerFailed() {
        super.onSyncServerFailed();
      }

      @Override
      public void onNewConversation(List<V2TIMConversation> conversationList) {
        super.onNewConversation(conversationList);
      }

      @Override
      public void onConversationChanged(List<V2TIMConversation> conversationList) {
        super.onConversationChanged(conversationList);
      }
    });
  }
}
