package com.miya.fastcashier.utils

import android.content.Context
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.net.ConnectivityManager
import android.net.NetworkInfo
import android.net.wifi.WifiInfo
import android.net.wifi.WifiManager
import android.text.TextUtils
import java.net.Inet4Address
import java.net.NetworkInterface
import java.net.SocketException

fun isEmpty(s: String?): Boolean {
    return TextUtils.isEmpty(s)
}

fun isEmpty(list: List<Any>?): Boolean {
    return list == null || list.isEmpty()
}

fun sp2px(context: Context, spValue: Float): Int {
    val fontScale: Float = context.resources.displayMetrics.scaledDensity
    return (spValue * fontScale + 0.5f).toInt()
}

/**
 * 根据分辨率从 dp 的单位 转成为 px(像素)
 */
fun dp2px(context: Context, dpValue: Float): Int {
    val scale = context.resources.displayMetrics.density
    return (dpValue * scale + 0.5f).toInt()
}

fun getNetIp(c: Context): String? {
    val info =
        (c.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).activeNetworkInfo
    if (info != null && info.isConnected) {
        if (info.type == ConnectivityManager.TYPE_MOBILE) { //当前使用2G/3G/4G网络
            try {
                //Enumeration<NetworkInterface> en=NetworkInterface.getNetworkInterfaces();
                val en = NetworkInterface.getNetworkInterfaces()
                while (en.hasMoreElements()) {
                    val intf = en.nextElement()
                    val enumIpAddr = intf.inetAddresses
                    while (enumIpAddr.hasMoreElements()) {
                        val inetAddress = enumIpAddr.nextElement()
                        if (!inetAddress.isLoopbackAddress && inetAddress is Inet4Address) {
                            return inetAddress.getHostAddress()
                        }
                    }
                }
            } catch (e: SocketException) {
                e.printStackTrace()
            }
        } else if (info.type == ConnectivityManager.TYPE_WIFI) { //当前使用无线网络
            val wifiManager = c.getSystemService(Context.WIFI_SERVICE) as WifiManager
            val wifiInfo = wifiManager.connectionInfo
            return intIP2StringIP(wifiInfo.ipAddress) //得到IPV4地址
        }
    } else {
        //当前无网络连接,请在设置中打开网络
    }
    return null
}

/**
 * 将得到的int类型的IP转换为String类型
 *
 * @param ip
 * @return
 */
fun intIP2StringIP(ip: Int): String? {
    return (ip and 0xFF).toString() + "." +
            (ip shr 8 and 0xFF) + "." +
            (ip shr 16 and 0xFF) + "." +
            (ip shr 24 and 0xFF)
}


/**
 * 获取wifi名称(即ssid)
 *
 * @param c
 * @return
 */
fun getWifyName(c: Context): String? {
    val mWifiManager = c.getSystemService(Context.WIFI_SERVICE) as WifiManager
    return mWifiManager.connectionInfo.ssid
}

fun getVersion(context: Context): String? {
    val packageManager = context.packageManager
    val packageInfo: PackageInfo
    var version = ""
    try {
        packageInfo = packageManager.getPackageInfo(context.packageName, 0)
        version = "${packageInfo.versionCode}_v${packageInfo.versionName}"
    } catch (e: PackageManager.NameNotFoundException) {
        e.printStackTrace()
    }
    return version
}

fun getVersionCode(context: Context): String? {
    val packageManager = context.packageManager
    val packageInfo: PackageInfo
    var version = ""
    try {
        packageInfo = packageManager.getPackageInfo(context.packageName, 0)
        version = "${packageInfo.versionCode}"
    } catch (e: PackageManager.NameNotFoundException) {
        e.printStackTrace()
    }
    return version
}

/**
 *  判断是否有网络连接
 *  @param context
 */
fun isNetworkConnected(context: Context?): Boolean {
    if (context != null) {
        val mConnectivityManager = context
            .getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val mNetworkInfo = mConnectivityManager.activeNetworkInfo
        if (mNetworkInfo != null) {
            return mNetworkInfo.isAvailable
        }
    }
    return false
}