/*
 * Copyright (C) 2021  即时通讯网(52im.net) & Jack Jiang.
 * The MobileIMSDK_UDP (MobileIMSDK v6.x UDP版) Project.
 * All rights reserved.
 *
 * > Github地址：https://github.com/JackJiang2011/MobileIMSDK
 * > 文档地址：  http://www.52im.net/forum-89-1.html
 * > 技术社区：  http://www.52im.net/
 * > 技术交流群：215477170 (http://www.52im.net/topic-qqgroup.html)
 * > 作者公众号：“即时通讯技术圈】”，欢迎关注！
 * > 联系作者：  http://www.52im.net/thread-2792-1-1.html
 *
 * "即时通讯网(52im.net) - 即时通讯开发者社区!" 推荐开源工程。
 *
 * IMClientManager.java at 2021-7-2 23:04:01, code by Jack Jiang.
 */
package com.renrenliao.im.im;

import android.content.Context;

import net.openmob.mobileimsdk.android.ClientCoreSDK;


/**
 * MobileIMSDK的管理类。
 * 正式的APP项目中，建议在Application中管理本类，确保SDK的生命周期同步于整个APP的生命周期。
 *
 * @author Jack Jiang(http://www.52im.net/thread-2792-1-1.html)
 */
public class IMClientManager {

    private static String TAG = IMClientManager.class.getSimpleName();

    private static IMClientManager instance = null;

    private Context context = null;

    /**
     * MobileIMSDK的基础通信消息的回调事件实现类（回调事件可以是：登陆成功事件 通知、掉线事件通知等）。
     * <p>
     * 通过 ClientCoreSDK.setChatBaseEvent(..) 方法设置之，可实现回调事件的通知和处理。
     */
    private IMEventListener imEventListener = null;

    /**
     * MobileIMSDK的通用数据通信消息的回调事件接口（回调事件可以是：收到聊天数据事件 通知、服务端返回的
     * 错误信息事件通知等）。
     * <p>
     * 通过 ClientCoreSDK.setChatTransDataEvent(..) 方法设置之，可实现回调事件的通知和处理。
     */
  //  private ChatTransDataEventListener transDataListener = null;

    /**
     * MobileIMSDK的QoS质量保证机制的回调事件实现类。
     * <p>
     * 通过 ClientCoreSDK.setMessageQoSEvent(..) 方法设置之，可实现消息已被收到或未成功送出的通知和处理。
     */
  //  private ChatQoSEventListener chatQoSEventListener = null;



    /* MobileIMSDK是否已被初始化. true表示已初化完成，否则未初始化. */
   // private boolean _init = false;

    public static IMClientManager getInstance(Context context) {
        if (instance == null)
            synchronized (IMClientManager.class) {
                if (instance == null) {
                    instance = new IMClientManager(context);
                }
            }
        return instance;
    }

    private IMClientManager(Context context) {
        this.context = context;
        initMobileIMSDK();
    }

    /**
     * MobileIMSDK的初始化方法。正式的APP项目中，建议本方法在Application的子类中调用。
     */
    public void initMobileIMSDK() {
       // if (!this._init) {
            // 设置AppKey
            //		ConfigEntity.appKey = "5418023dfd98c579b6001741";

            // 设置服务器ip和服务器端口

		//	IMConfigEntity.serverIP = Const.IM_IP;
        //    IMConfigEntity.serverPort = Const.IM_PORT;

            // MobileIMSDK核心IM框架的敏感度模式设置
//			ConfigEntity.setSenseMode(SenseMode.MODE_10S);

            // 开启/关闭DEBUG信息输出
//	    	ClientCoreSDK.DEBUG = false;

            // 【特别注意】请确保首先进行核心库的初始化（这是不同于iOS和Java端的地方)
        imEventListener = new IMEventListener();
//            transDataListener = new ChatTransDataEventListener(context);
//            chatQoSEventListener = new ChatQoSEventListener(context);

            ClientCoreSDK.getInstance().init(this.context);

            ClientCoreSDK.getInstance().setImEvent(imEventListener);
           // ClientCoreSDK.getInstance().setChatTransDataEvent(transDataListener);
           // ClientCoreSDK.getInstance().setMessageQoSEvent(chatQoSEventListener);

            // 设置事件回调

//			chatMessageListener = new ChatMessageEventImpl();
//			messageQoSListener = new MessageQoSEventImpl();
//			ClientCoreSDK.getInstance().setChatBaseEvent(chatBaseListener);
//			ClientCoreSDK.getInstance().setChatMessageEvent(chatMessageListener);
//			ClientCoreSDK.getInstance().setMessageQoSEvent(messageQoSListener);


      //  }
    }

    public void release() {
        ClientCoreSDK.getInstance().release();
    }

    /**
     * 重置init标识。
     * <p>
     * <b>重要说明：</b>不退出APP的情况下，重新登陆时记得调用一下本方法，不然再
     * 次调用 {@link #initMobileIMSDK()} 时也不会重新初始化MobileIMSDK（
     * 详见 {@link #initMobileIMSDK()}代码）而报 code=203错误！
     */
//    public void resetInitFlag() {
//        _init = false;
//    }


}
