package com.sobot.pictureframe;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.util.Log;
import android.view.WindowManager;
import android.widget.ImageView;

import com.sobot.chat.imageloader.SobotGlideV4ImageLoader;
import com.sobot.chat.imageloader.SobotImageLoader;

//图片显示工具类
public class SobotBitmapUtil {

    private static SobotImageLoader sImageLoader;

    private static SobotImageLoader getImageLoader() {
        if (sImageLoader == null) {
            synchronized (SobotBitmapUtil.class) {
                if (sImageLoader == null) {
                    if (isClassExists("com.bumptech.glide.request.RequestOptions")) {
                        sImageLoader = new SobotGlideV4ImageLoader();
                    } else if (isClassExists("com.bumptech.glide.Glide")) {
                        sImageLoader = new SobotGlideImageLoader();
                    } else if (isClassExists("com.squareup.picasso.Picasso")) {
                        sImageLoader = new SobotPicassoImageLoader();
                    } else if (isClassExists("com.nostra13.universalimageloader.core.ImageLoader")) {
                        sImageLoader = new SobotUILImageLoader();
                    } else if (isClassExists("com.facebook.drawee.backends.pipeline.Fresco")) {
                        sImageLoader = new SobotFrescoImageLoader();
                    } else {
                        Log.d("SobotBitmapUtil", "getImageLoader()为空: 必须在(Glide、Picasso、universal-image-loader、Fresco)中选择一个图片加载库添加依赖,或者检查是否添加了相应的混淆配置");
                    }
                }
            }
        }
        return sImageLoader;
    }

    //判断是否存在该类
    private static boolean isClassExists(String classFullName) {
        try {
            Class.forName(classFullName);
            return true;
        } catch (ClassNotFoundException e) {
            return false;
        }
    }

    //使用客户指定的图片加载器
    public static void setImageLoader(SobotImageLoader imageLoader) {
        sImageLoader = imageLoader;
    }

    /**
     * 加载网络图片
     *
     * @param context    上下文
     * @param url        网络图片地址
     * @param imageView  图片控件
     * @param defaultPic 预加载图片
     * @param error      加载失败图片
     */
    public static void display(Context context, String url,
                               ImageView imageView, int defaultPic, int error) {
        if (context != null && imageView != null && getImageLoader() != null) {
            getImageLoader().displayImage(context, imageView, url, defaultPic, error, imageView.getWidth(), imageView.getHeight(), null);
        }
    }

    /**
     * 加载网络图片
     *
     * @param context     上下文
     * @param url         网络图片地址
     * @param imageView   图片控件
     * @param defaultPic  预加载图片
     * @param error       加载失败图片
     * @param imageWidth  图片控件宽高
     * @param imageHeight 图片控件宽高
     * @param listener    加载结果回调
     */
    public static void display(Context context, String url,
                               ImageView imageView, int defaultPic, int error, int imageWidth, int imageHeight, SobotImageLoader.SobotDisplayImageListener listener) {
        if (context != null && imageView != null&& getImageLoader() != null) {
            getImageLoader().displayImage(context, imageView, url, defaultPic, error, imageWidth, imageHeight, listener);
        }
    }

    /**
     * 加载网络图片
     *
     * @param context   上下文
     * @param url       网络图片地址
     * @param imageView 图片控件
     */
    public static void display(Context context, String url,
                               ImageView imageView) {
        if (context != null && imageView != null&& getImageLoader() != null) {
            getImageLoader().displayImage(context, imageView, url, 0, 0, imageView.getWidth(), imageView.getHeight(), null);
        }
    }

    /**
     * 本地图片加载图片
     *
     * @param context    上下文
     * @param resourceId 本地图片地址
     * @param imageView  图片控件
     */
    public static void display(Context context, int resourceId, ImageView imageView) {
        if (context != null && imageView != null&& getImageLoader() != null) {
            getImageLoader().displayImage(context, imageView, resourceId, 0, 0, imageView.getWidth(), imageView.getHeight(), null);
        }
    }

    /**
     * uri 方式加载图片
     *
     * @param context   上下文
     * @param uri       图片Uri
     * @param imageView 图片控件
     */
    public static void display(Context context, Uri uri, ImageView imageView) {
        if (context != null && imageView != null&& getImageLoader() != null) {
            getImageLoader().displayImage(context, imageView, uri, 0, 0, imageView.getWidth(), imageView.getHeight(), null);
        }
    }


    public static Bitmap compress(String filePath, Context context, boolean isCamera) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || isCamera) {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;// 设置后decode图片不会返回一个bitmap对象，但是会将图片的信息封装到Options中
            BitmapFactory.decodeFile(filePath, options);
            WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

            int width = wm.getDefaultDisplay().getWidth();
            int height = wm.getDefaultDisplay().getHeight();
            options.inSampleSize = SobotPictureUtils.calculateInSampleSize(options, width, height);
            options.inJustDecodeBounds = false;

            return BitmapFactory.decodeFile(filePath, options);
        } else {

            return SobotPictureUtils.getBitmapFromUri(context, SobotPictureUtils.getImageContentUri(context, filePath));

        }
    }
}