package com.oo.seex.oo_statistics_lib;

import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.text.TextUtils;

import com.oo.seex.oo_statistics_lib.constant.OOConstant;
import com.oo.seex.oo_statistics_lib.utils.CommonUtil;
import com.oo.seex.oo_statistics_lib.utils.FileUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by efort on 15/7/30.
 * 试用接口；提供统计以及错误log提交服务
 */
public class OOAgent {

    /**
     * 发送这个页面的本次统计(activity）
     *
     * @param activity
     */
    public static void onPauseActivity(final Activity activity) {
        DataDeal.getInstance().dealActivityPause(activity);
    }

    /**
     * 开始统计这个页面（activity）
     *
     * @param activity
     */
    public static void onResumeActivity(final Activity activity) {
        DataDeal.getInstance().dealActivityResume(activity);
    }

    /**
     * 开始统计
     * @param context
     * @param fragmentName
     */
    public static void onFragmentResume(final Context context, final String fragmentName) {
        if (TextUtils.isEmpty(fragmentName)) {
            return;
        }
        DataDeal.getInstance().dealResumeFragment(context,fragmentName);
    }

    /**
     * 结束统计fragment的内容
     *
     * @param activity
     * @param fragmentName
     */
    public static void onFragmentPause(final Activity activity, final String fragmentName) {
        if (TextUtils.isEmpty(fragmentName)) {
            return;
        }
        DataDeal.getInstance().dealPauseFragment(activity,fragmentName);
    }


    /**
     * 发送自定义事件
     *
     * @param context
     * @param event_id
     */
    public static void onEvent(final Context context, final String event_id) {
        DataDeal.getInstance().onEvent(context, event_id, "", null, 1);
    }
    /**
     * 发送自定义事件
     *
     * @param context
     * @param event_id
     */
    public static void onEvent(Context context, String event_id, int acc) {
        DataDeal.getInstance().onEvent(context, event_id, "", null, acc);
    }


    /**
     * @param mContext
     * @param event_id 事件id;
     * @param label    事件标签；
     * @param remark   事件参数；
     */
    private static void onEvent(Context mContext, String event_id, String label, String remark) {
        HashMap<String, String> remarks = null;
        if (!TextUtils.isEmpty(remark)) {
            remarks = new HashMap<String, String>();
            remarks.put("tag", remark);
        }
        DataDeal.getInstance().onEvent(mContext, event_id, label, remarks, 1);
    }

    /**
     * @param mContext
     * @param event_id 事件id;
     * @param label    事件标签；
     */
    public static void onEvent(Context mContext, String event_id, String label) {
        DataDeal.getInstance().onEvent(mContext, event_id, label, null, 1);
    }

    /**
     * @param mContext
     * @param event_id 自定义事件的标示ID
     * @param remarks  事件传递的参数；
     */
    public static void onEvent(Context mContext, String event_id, Map<String, String> remarks) {
        DataDeal.getInstance().onEvent(mContext, event_id, "", remarks, 1);
    }

    /**
     * @param mContext
     * @param event_id 自定义时间的标示ID；
     * @param label    计数器；
     * @param remarks  事件传递的参数；
     */
    public static void onEvent(Context mContext, String event_id, String label, Map<String, String> remarks) {
        DataDeal.getInstance().onEvent(mContext, event_id, label, remarks, 1);
    }

    /**
     * 设置标示符,其实就是将我门应用的个人标示保存起来  eg  userID
     *
     * @param version  OS版本号
     */
    public static void bindOSVersion(final Context context,String version) {
        if (TextUtils.isEmpty(version)) {
            version = "0";
        }
        FileUtil.saveOSToFile(version);
    }

    /**
     * 设置标示符,其实就是将我门应用的个人标示保存起来  eg  userID
     *
     * @param identifier
     */
    public static void bindUserIdentifier(final Context context,String identifier) {
        if (TextUtils.isEmpty(identifier)) {
            identifier = "0";
        }
       FileUtil.saveUserIdToFile(identifier);
    }

    /**
     * 设置标示符,其实就是将我门应用的个人标示保存起来  eg  userID
     * 这个方法还用于统计第三方登陆
     *
     * @param identifier
     * @param provider   第三方渠道名称
     */
    public static void bindUserIdentifier(final Context context, String identifier, final String provider) {
        try {
            if (TextUtils.isEmpty(identifier)) {
                identifier = "0";
            }
            FileUtil.saveUserIdToFile(identifier);

            HashMap<String, String> tempMap = new HashMap<>();
            tempMap.put("PROVIDER", provider);
            tempMap.put("USERID", identifier);

            onEvent(context, "shinc_add_userId_provider", "", tempMap);
        } catch (Exception e) {
            CommonUtil.printLog("error_shinc_add_userId_provider", "info: " + e);
        }

    }

    /**
     * 初始化设备信息
     *
     * @param context
     */
    public static void initShincAgent(Context context, String deviceId, String requestUrl) {
        setBaseURL(requestUrl);
        DataDeal.getInstance().initShincAgent(context, deviceId);
    }

    /**
     * 错误日志
     */
    public static void showDebug() {
        OOConstant.DebugMode = true;
    }

    /**
     * set base URL like http://localhost/razor/ums/index.php?
     * 访问服务器地址   在我们的应用一开始的视后就需要设置
     *
     * @param url
     */
    public static void setBaseURL(String url) {
        //最初的服务器地址url
        if (!TextUtils.isEmpty(url)) {
            OOConstant.preUrl = url;
        } else {
            CommonUtil.printLog("OOAgent:", "base url should not NULL or \"\"");
        }
    }

    public static String getUserAgent(Context context){
        StringBuilder user_agent = new StringBuilder();
        user_agent.append("device_sn:" + Build.SERIAL);
        user_agent.append(";user_id:" + CommonUtil.getUserIdentifier(context));
        user_agent.append(";device_ip:" + CommonUtil.getIp(context));
        user_agent.append(";os_version:" + CommonUtil.getOSVersion(context));
        user_agent.append(";soft_version:" + CommonUtil.getVersion(context));
        user_agent.append(";app_key:" + CommonUtil.getAppKey(context));
        user_agent.append(";platform:" + Build.PRODUCT);
        return user_agent.toString();
    }
}
