package com.xhly.corelib.utils;

import android.content.Context;
import android.os.Build;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.text.TextUtils;

import java.io.File;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Locale;

/**
 * 作者：NB的LittleWhite
 * <p>
 * 邮箱：zhan_0313@163.com
 */
public class SystemUtil {


    /**
     * 获取当前手机系统语言。
     *
     * @return 返回当前系统语言。例如：当前设置的是“中文-中国”，则返回“zh-CN”
     */
    public static String getSystemLanguage() {
        return Locale.getDefault().getLanguage();
    }

    /**
     * 获取当前系统上的语言列表(Locale列表)
     *
     * @return 语言列表
     */
    public static Locale[] getSystemLanguageList() {
        return Locale.getAvailableLocales();
    }

    /**
     * 获取当前手机系统版本号
     *
     * @return 系统版本号
     */
    public static String getSystemVersion() {
        String version = "";
        if (isHarmonyOs()) {
            version = "Harmony    " + getHarmonyVersion();
        } else {
            version = "Android    " + Build.VERSION.RELEASE;
        }
        return version;
    }

    /**
     * 获取手机型号
     *
     * @return 手机型号
     */
    public static String getSystemModel() {
        return Build.MODEL;
    }


    /**
     * 获取手机版本号
     *
     * @return 手机型号
     */
    public static String getSystemDisplay() {
        return Build.DISPLAY;
    }

    /**
     * 获取手机厂商
     *
     * @return 手机厂商
     */
    public static String getDeviceBrand() {
        return Build.BRAND;
    }


    /**
     * 是否为鸿蒙系统
     *
     * @return true为鸿蒙系统
     */
    public static boolean isHarmonyOs() {
        try {
            Class<?> buildExClass = Class.forName("com.huawei.system.BuildEx");
            Object osBrand = buildExClass.getMethod("getOsBrand").invoke(buildExClass);
            return "Harmony".equalsIgnoreCase(osBrand.toString());
        } catch (Throwable x) {
            return false;
        }
    }

    /**
     * 获取鸿蒙系统版本号
     *
     * @return 版本号
     */
    public static String getHarmonyVersion() {
        return getProp("hw_sc.build.platform.version", "");
    }

    private static String getProp(String property, String defaultValue) {
        try {
            Class spClz = Class.forName("android.os.SystemProperties");
            Method method = spClz.getDeclaredMethod("get", String.class);
            String value = (String) method.invoke(spClz, property);
            if (TextUtils.isEmpty(value)) {
                return defaultValue;
            }
            return value;
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return defaultValue;
    }

    public static String getCpuName() {
        String[] abis = Build.SUPPORTED_ABIS;
        StringBuilder abiStr = new StringBuilder();
        for (String abi : abis) {
            abiStr.append(abi);
            abiStr.append(',');
        }
        return abis[0];
    }


    /**
     * 是否存在su命令，并且有执行权限
     *
     * @return 存在su命令，并且有执行权限返回true
     */
    public static boolean isSuEnable() {
        File file = null;
        String[] paths = {"/system/bin/", "/system/xbin/", "/system/sbin/", "/sbin/", "/vendor/bin/", "/su/bin/"};
        try {
            for (String path : paths) {
                file = new File(path + "su");
                if (file.exists() && file.canExecute()) {
                    return true;
                }
            }
        } catch (Exception x) {
            x.printStackTrace();
        }
        return false;
    }

    /**
     * 获得系统内核版本
     *
     * @return
     */

    public static String getKernelVersion() {
        String kernelVersion = "";
        try {
            kernelVersion = System.getProperty("os.version");
        } catch (Exception e) {

        }
        return kernelVersion;
    }

    public static String getICCID(Context context) {
        String iccid = "";
        try{
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
                SubscriptionManager sm = SubscriptionManager.from(context);
                List<SubscriptionInfo> sis = sm.getActiveSubscriptionInfoList();
                if (sis.size() >= 1) {
                    SubscriptionInfo si1 = sis.get(0);
                    String iccId1 = si1.getIccId();
                    String phoneNum1 = si1.getNumber();
                    iccid=iccId1;
                }
                if (sis.size() >= 2) {
                    SubscriptionInfo si2 = sis.get(1);
                    String iccId2 = si2.getIccId();
                    String phoneNum2 = si2.getNumber();
                    iccid=iccId2;
                }
                // 获取SIM卡数量相关信息：
                int count = sm.getActiveSubscriptionInfoCount();//当前实际插卡数量
                int max = sm.getActiveSubscriptionInfoCountMax();//当前卡槽数量
            }
        }catch (Exception e){

        }
        return iccid;
    }


}
