package chaoran.business.utils;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.bluetooth.le.ScanSettings;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.os.Build;
import android.util.Log;
import android.view.Surface;
import android.view.View;
import android.view.WindowManager;
import android.webkit.JavascriptInterface;

import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

import chaoran.business.BuildConfig;
import chaoran.business.R;
import chaoran.business.activity.MainActivity;

public class LocalAddressUtil {

    private Context context;

    private Activity activity;

    private View view;

    private int[] heights;

    public LocalAddressUtil(Context context, Activity activity, View view) {
        this.context = context;
        this.activity = activity;
        this.view = view;
        this.heights = StatusBarUtil.getStatusBarHeight(context);
    }

    @SuppressLint("JavascriptInterface")
    @JavascriptInterface
    public String getIpAddress() {
        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                NetworkInterface intf = en.nextElement();
                // if(!intf.getDisplayName().equals("eth0")) continue;
                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    if (!inetAddress.isLoopbackAddress()  && inetAddress instanceof Inet4Address) {
                        return inetAddress.getHostAddress();
                    }
                }
            }
        } catch (SocketException ex) {
            Log.e("address: local", ex.toString());
        }
        return null;
    }

    @SuppressLint("JavascriptInterface")
    @JavascriptInterface
    public String getMacAddress(){//可以兼容安卓7以下
        String macAddress = null;
        StringBuffer buf = new StringBuffer();
        NetworkInterface networkInterface = null;
        try {
            networkInterface = NetworkInterface.getByName("eth1");
            if (networkInterface == null) {
                networkInterface = NetworkInterface.getByName("wlan0");
            }
            if (networkInterface == null) {
                return "02:00:00:00:00:02";
            }
            byte[] addr = networkInterface.getHardwareAddress();
            for (byte b : addr) {
                buf.append(String.format("%02X:", b));
            }
            if (buf.length() > 0) {
                buf.deleteCharAt(buf.length() - 1);
            }
            macAddress = buf.toString();
        } catch (SocketException e) {
            e.printStackTrace();
            return "02:00:00:00:00:02";
        }
        return macAddress;
    }
    @SuppressLint("JavascriptInterface")
    @JavascriptInterface
    public String getInfo(int type){
        String info;
        switch (type) {
            case 1: info =  Build.BRAND;break;//品牌
            case 2: info = Build.MODEL;break;//型号
            case 3: info = Build.MANUFACTURER;break;//厂商
            case 4: info = Build.DEVICE;break;//设备名
            case 5: info = Build.ID;break;//设备硬件id
//            case 6: info = Build.SERIAL;break;//序列号，可能获取不到
            default: info = "";break;
        }
        return info;
    }

    @SuppressLint("JavascriptInterface")
    @JavascriptInterface
    public String getHeight(int type) {
        String info = "";
        switch (type) {
            case 1 : info = String.valueOf(this.heights[0]); break;
            case 2 : info = String.valueOf(this.heights[1]); break;
        }
        return info;
    }

    public void test(){
        Log.e("test", "MANUFACTURER=" + Build.MANUFACTURER);
        Log.e("test", "BRAND=" + Build.BRAND);
        Log.e("test", "MODEL=" + Build.MODEL);
        Log.e("test", "VERSION.RELEASE=" + Build.VERSION.RELEASE);
        Log.e("test", "VERSION.SDK_INT=" + Build.VERSION.SDK_INT);
        Log.e("test", "DEVICE=" + Build.DEVICE);
        Log.e("test", "HOST=" + Build.HOST);
        Log.e("test", "ID=" + Build.ID);
        Log.e("test", "TIME=" + Build.TIME);
        Log.e("test", "TYPE=" + Build.TYPE);
        Log.e("test", "PRODUCT=" + Build.PRODUCT);
        Log.e("test", "BOARD=" + Build.BOARD);
        Log.e("test", "DISPLAY=" + Build.DISPLAY);
        Log.e("test", "FINGERPRINT=" + Build.FINGERPRINT);
        Log.e("test", "HARDWARE=" + Build.HARDWARE);
        Log.e("test", "BOOTLOADER=" + Build.BOOTLOADER);
        Log.e("test", "TAGS=" + Build.TAGS);
        Log.e("test", "UNKNOWN=" + Build.UNKNOWN);
        Log.e("test", "USER=" + Build.USER);
    }

    @SuppressLint("JavascriptInterface")
    @JavascriptInterface
    public void rotateScreen() {
        int angle = ((WindowManager)activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();

        switch (angle) {
            case Surface.ROTATION_0:
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
                break;
            case Surface.ROTATION_90:
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
                break;
            case Surface.ROTATION_180:
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                break;
            case Surface.ROTATION_270:
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                break;
            default:
                break;
        }
    }

    @SuppressLint("JavascriptInterface")
    @JavascriptInterface
    public String getApkVersion() {
        return BuildConfig.VERSION_NAME;
    }
}
