/*
 *    Copyright (C) 2017 MINDORKS NEXTGEN PRIVATE LIMITED
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

package com.duben.library.utils;

import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Build;
import android.os.Environment;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityManager;

import androidx.core.content.ContextCompat;


import com.duben.happyplaylet.MintsApplication;
import com.duben.happyplaylet.manager.UserManager;

import java.io.File;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Locale;

public final class Utils {

    private Utils() {
        // no instance
    }

    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    public static String formatSize(long size) {
        if (size <= 0)
            return "";
        final String[] units = new String[]{"B", "KB", "MB", "GB", "TB"};
        int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
        return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
    }

    public static File[] getFileList(String str) {
        File file = new File(str);
        if (!file.isDirectory()) {
            return new File[0];
        }

        return file.listFiles();
    }

    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    public static String getRootDirPath(Context context) {
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
            File file = ContextCompat.getExternalFilesDirs(context.getApplicationContext(),
                    null)[0];
            return file.getAbsolutePath();
        } else {
            return context.getApplicationContext().getFilesDir().getAbsolutePath();
        }
    }

    public static String getProgressDisplayLine(long currentBytes, long totalBytes) {
        return getBytesToMBString(currentBytes) + "/" + getBytesToMBString(totalBytes);
    }

    private static String getBytesToMBString(long bytes) {
        return String.format(Locale.ENGLISH, "%.2fMB", bytes / (1024.00 * 1024.00));
    }


    public static void main(String[] args) {
        System.out.println((int) ((Math.random() * 9 + 1) * 100000));
    }


    /**
     * 隐藏按键状态栏
     *
     * @param activity
     */
    public static void hideBottomUIMenu(Activity activity) {
        //隐藏虚拟按键，并且全屏
        if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
            View v = activity.getWindow().getDecorView();
            v.setSystemUiVisibility(View.GONE);
        } else if (Build.VERSION.SDK_INT >= 19) {

            Window _window = activity.getWindow();
            WindowManager.LayoutParams params = _window.getAttributes();
            params.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE;
            _window.setAttributes(params);
        }
    }

    /**
     * 隐藏顶部状态栏
     *
     * @param activity
     */
    public static void hideTopUIStatus(Activity activity) {
        //去掉电池状态栏
        activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    /**
     * 设置全屏
     *
     * @param activity
     */
    public static void setPhoneFullscreen(Activity activity) {
        //去掉电池状态栏
        activity.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    }


    /**
     * 判断Activity是否Destroy
     *
     * @return
     */
    public static boolean isDestroy(Activity activity) {
        if (activity == null || activity.isFinishing() || activity.isDestroyed()) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @return true 加载广告
     */
    public static boolean canLoadAd() {
        if (UserManager.getInstance().getVipFlag()) {
            return false;
        }
        return true;
    }

    public static String floatFormat(double value) {
        DecimalFormat decimalFormat = new DecimalFormat(".00");
        return decimalFormat.format(value);
    }

    public static void copyText(String text) {
        Context context = MintsApplication.getContext();
        ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
        clipboardManager.setPrimaryClip(ClipData.newPlainText("box_copy", text));

    }

    public static String replaceWithEscapeCharForSql(String src) {
        if (src == null) {
            return null;
        }

        /*String[][] escapeCharReplaceInSql = {{"/", "//"}, {"'", "''"}, {"[", "/["}, {"]", "/]"}, {"%", "/%"}, {"&","/&"}, {"_", "/_"}, {"(", "/("}, {")", "/)"}};

        for(String[] escapeChars : escapeCharReplaceInSql){
            src = src.replace(escapeChars[0], escapeChars[1]);
        }*/
        src = src.replace("'", "''");

        return src;
    }
}
