package ugen.fy.plugin;

import android.text.TextUtils;

import com.alibaba.fastjson.JSON;
import com.alibaba.sdk.android.openaccount.ConfigManager;
import com.alibaba.sdk.android.openaccount.ui.OpenAccountUIConfigs;
import com.aliyun.iot.aep.oa.page.OAMobileCountrySelectorActivity;
import com.aliyun.iot.aep.sdk.IoTSmart;
import com.aliyun.iot.aep.sdk.framework.AApplication;
import com.aliyun.iot.aep.sdk.framework.config.GlobalConfig;
import com.aliyun.iot.aep.sdk.log.ALog;
import com.aliyun.iot.aep.sdk.login.LoginBusiness;
import com.aliyun.iot.aep.sdk.login.oa.OALoginAdapter;
// import com.aliyun.iot.ilop.demo.page.debug.Env;
import com.facebook.FacebookSdk;
import ugen.fy.plugin.R;

import static com.aliyun.iot.aep.sdk.IoTSmart.REGION_ALL;

public class SDKInitHelper {
    private static final String TAG = "SDKInitHelper";

    public static void init(AApplication app) {
        if (app == null) {
            return;
        }
        preInit(app);
        onInit(app);
        //onInitDefault(app);
        postInit(app);
    }

    /**
     * 初始化之前准备工作
     * @param app
     */
    private static void preInit(AApplication app) {
        //要在OA初始化前调用
        ConfigManager.getInstance().setGoogleClientId(app.getString(R.string.server_client_id));

        String appId = app.getString(R.string.facebook_app_id);
        FacebookSdk.setApplicationId(appId);
        ConfigManager.getInstance().setFacebookId(appId);
    }

    /**
     * 默认初始化
     * @param app
     */
    private static void onInitDefault(AApplication app) {
        GlobalConfig.getInstance().setApiEnv(GlobalConfig.API_ENV_PRE);
        GlobalConfig.getInstance().setBoneEnv(GlobalConfig.BONE_ENV_TEST);

        IoTSmart.init(app);
    }
    /**
     * 带参数初始化
     * @param app
     */
    private static void onInit(AApplication app) {
        // 默认的初始化参数
        IoTSmart.InitConfig initConfig = new IoTSmart.InitConfig()
                // REGION_ALL: 支持连接中国大陆和海外多个接入点，此时需在注册 APP 账号时设置国家
                // REGION_CHINA_ONLY: 直连中国大陆接入点，只在中国大陆出货选这个
                .setRegionType(REGION_ALL) // 注意：如果不运行此语句，默认为 REGION_CHINA_ONLY ，然后在注册 APP 账号设置国家时会失败

                // 对应控制台上的测试版（PRODUCT_ENV_DEV）和正式版（PRODUCT_ENV_PROD）(默认)
                // setProductEnv 是 API Level 8 专用，API Level 9 及以上版本使用 IoTSmart.setProductScope
                // 来区分 App 是否操作未发布产品，且不再区分测试版与正式版，统一为正式版
                // .setProductEnv(IoTSmart.PRODUCT_ENV_DEV)

                // 是否打开日志
                // true：表示显示所有日志
                // fasle：表示只显示 error 日志
                .setDebug(true);

        // 定制三方通道离线推送，目前支持华为、小米、FCM、oppo、vivo
        IoTSmart.PushConfig pushConfig = new IoTSmart.PushConfig();
        pushConfig.fcmApplicationId = "fcmid"; // 替换为从FCM平台申请的id
        pushConfig.fcmSendId = "fcmsendid"; // 替换为从FCM平台申请的sendid
        pushConfig.xiaomiAppId = "XiaoMiAppId"; // 替换为从小米平台申请的AppID
        pushConfig.xiaomiAppkey = "XiaoMiAppKey"; // 替换为从小米平台申请的AppKey
        pushConfig.oppoAppKey = "oppoAppKey"; // 替换为从oppo平台申请的AppKey
        pushConfig.oppoAppSecret = "oppoAppSecret"; // 替换为从oppo平台申请的AppSecret
        // 华为、vivo 推送通道需要在 AndroidManifest.xml 里面添加，此处无需配置

        initConfig.setPushConfig(pushConfig);

        // 这个是设置环境的 api 环境和 Bone 环境的，对外应该是没有环境隔离的，
        // 只有阿里云内部自己开发时有环境隔离。对外的应该默认都是线上，所以不需要设置。
        // 估计也是因此而没有对外开放 GlobalConfig 各个枚举量的说明文档。
        // GlobalConfig.getInstance().setApiEnv(GlobalConfig.API_ENV_ONLINE);
        // GlobalConfig.getInstance().setBoneEnv(GlobalConfig.BONE_ENV_TEST);

        ALog.d(TAG, "initConfig1:" + JSON.toJSONString(initConfig));
        // 切换国内，国外环境，测试版、正式版环境后的初始化参数
        // Env env = Env.getInstance();
        // ALog.d(TAG, "env:" + env.toString());
        // if (env.isSwitched()) {
        //     if (!TextUtils.isEmpty(env.getApiEnv())) {
        //         GlobalConfig.getInstance().setApiEnv(env.getApiEnv());
        //     }
        //     if (!TextUtils.isEmpty(env.getBoneEnv())) {
        //         GlobalConfig.getInstance().setBoneEnv(env.getBoneEnv());
        //     }
        //     if (!TextUtils.isEmpty(env.getProductEnv())) {
        //         initConfig.setProductEnv(env.getProductEnv());
        //     }

        //     ALog.d(TAG, "initConfig2:" + JSON.toJSONString(initConfig));
        // }

        // 设置 APP 配网列表的产品范围
        // PRODUCT_SCOPE_ALL: 表示当前项目中已发布和未发布的所有产品。
        // PRODUCT_SCOPE_PUBLISHED: 表示只包含已发布产品。正式发布的 APP 请选择 PRODUCT_SCOPE_PUBLISHED
        // 不过很奇怪的是，至少发现在蓝牙配网时，不论是否 PRODUCT_SCOPE_PUBLISHED ，都能扫描到并且配网
        IoTSmart.setProductScope(IoTSmart.PRODUCT_SCOPE_ALL);

        // 初始化，App须继承自AApplication，否则会报错
        IoTSmart.init(app, initConfig);
    }

    /**
     * 初始化后的定制参数
     *
     * @param app application
     */
    private static void postInit(@SuppressWarnings("unused") AApplication app) {
        OALoginAdapter adapter = (OALoginAdapter) LoginBusiness.getLoginAdapter();
        if (adapter != null) {
            adapter.setDefaultLoginClass(OALoginActivity.class);
        }
        OpenAccountUIConfigs.AccountPasswordLoginFlow.supportForeignMobileNumbers = true;
        OpenAccountUIConfigs.AccountPasswordLoginFlow.mobileCountrySelectorActvityClazz = OAMobileCountrySelectorActivity.class;

        OpenAccountUIConfigs.ChangeMobileFlow.supportForeignMobileNumbers = true;
        OpenAccountUIConfigs.ChangeMobileFlow.mobileCountrySelectorActvityClazz = OAMobileCountrySelectorActivity.class;

        OpenAccountUIConfigs.MobileRegisterFlow.supportForeignMobileNumbers = true;
        OpenAccountUIConfigs.MobileRegisterFlow.mobileCountrySelectorActvityClazz = OAMobileCountrySelectorActivity.class;

        OpenAccountUIConfigs.MobileResetPasswordLoginFlow.supportForeignMobileNumbers = true;
        OpenAccountUIConfigs.MobileResetPasswordLoginFlow.mobileCountrySelectorActvityClazz = OAMobileCountrySelectorActivity.class;

        OpenAccountUIConfigs.OneStepMobileRegisterFlow.supportForeignMobileNumbers = true;
        OpenAccountUIConfigs.OneStepMobileRegisterFlow.mobileCountrySelectorActvityClazz = OAMobileCountrySelectorActivity.class;
    }
}
