package com.stdnull.baselib.utils;

import android.app.ActivityManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

import com.stdnull.baselib.GlobalApplication;
import com.stdnull.baselib.common.RMConfiguration;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * 系统服务查询工具类
 * Created by chen on 2017/1/20.
 */

public final class SystemUtils {
    public static final int STATE_INSTALL = 0x0;
    public static final int STATE_UPDATE = 0x1;
    public static final int STATE_NORMAL = 0x2;

    public static int getApplicationState(Context context) throws PackageManager.NameNotFoundException {
        SharedPreferences sp = context.getSharedPreferences(RMConfiguration.FILE_CONFIG, Context.MODE_PRIVATE);
        String cacheVersion = sp.getString(RMConfiguration.KEY_VERSION, "");
        PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
        String curVersion = info.versionName + info.versionCode;
        if (StringUtils.isEmpty(cacheVersion)) {
            return STATE_INSTALL;
        }
        if (!curVersion.equals(cacheVersion)) {
            return STATE_UPDATE;
        }
        return STATE_NORMAL;
    }

    public static boolean isGpsEnabled(Context context) {
        LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    }

    public static boolean isNetworkEnable(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = connectivityManager.getActiveNetworkInfo();
        return info != null && info.isAvailable();
    }

    public static String getProcessName(Context context) {
        int pid = android.os.Process.myPid();//获取进程pid
        String processName = "";
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);//获取系统的ActivityManager服务
        for (ActivityManager.RunningAppProcessInfo appProcess : am.getRunningAppProcesses()) {
            if (appProcess.pid == pid) {
                processName = appProcess.processName;
                return processName;
            }
        }
        return processName;
    }

    public static String getDbPath() {
        StringBuilder dbPath = new StringBuilder("/data/data/");
        dbPath.append(GlobalApplication.getAppContext().getPackageName());
        dbPath.append("/databases");
        dbPath.append("/" + RMConfiguration.DATABASE_NAME);
        return dbPath.toString();
    }

    public static byte[] readAssets(Context context, String path) {
        try {
            InputStream inputStream = context.getAssets().open(path);
            int capacity = inputStream.available() + 4096;
            ByteArrayOutputStream buffer = new ByteArrayOutputStream(capacity);
            int read = 0;
            byte[] data = new byte[4096];
            while ((read = inputStream.read(data, 0, data.length))!= -1){
                buffer.write(data, 0, read);
            }
            buffer.flush();
            return buffer.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}