package com.dahe.mylibrary.utils;

import android.app.Activity;
import android.graphics.Color;
import android.view.View;
import android.widget.ImageView;

import androidx.core.content.ContextCompat;

import com.dahe.mylibrary.R;
import com.dahe.mylibrary.adapter.GridImageAdapter;
import com.dahe.mylibrary.dialog.DialogPhotoSelect;
import com.dahe.mylibrary.net.CommonResponseBean;
import com.dahe.mylibrary.weight.GlideEngine;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.listener.OnResultCallbackListener;
import com.luck.picture.lib.style.PictureCropParameterStyle;
import com.luck.picture.lib.style.PictureParameterStyle;
import com.luck.picture.lib.style.PictureSelectorUIStyle;
import com.luck.picture.lib.tools.SdkVersionUtils;

import java.lang.ref.WeakReference;
import java.util.List;

public class SelectPhotoUtils4 implements View.OnClickListener {



    private Activity ctx;
    private OnResultCallbackListener listener;
    private GridImageAdapter mAdapter;

    public void selectSimple(Activity ctx,ImageView imageView, OnResultCallbackListener callbackListener){
        this.ctx = ctx;
        this.listener = callbackListener;
        imageView.setOnClickListener(this);
        imageView.performClick();
    }


    private final GridImageAdapter.onAddPicClickListener onAddPicClickListener = new GridImageAdapter.onAddPicClickListener() {
        @Override
        public void onAddPicClick() {
            PictureSelector.create(ctx)
                    .openGallery(PictureMimeType.ofImage())
                    .imageEngine(GlideEngine.createGlideEngine())
                    .selectionMode(PictureConfig.MULTIPLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
                    .maxSelectNum(6)
                    .isPreviewImage(true)// 是否可预览图片 true or fals
                    .isGif(false)// 是否显示gif图片 true or false
                    .isCamera(true)// 是否显示拍照按钮 true or false
                    .isEnableCrop(true)// 是否裁剪 true or false
                    .selectionData(mAdapter.getData())// 是否传入已选图片
                    .circleDimmedLayer(false)// 是否圆形裁剪 true or false
                    .freeStyleCropEnabled(true)// 裁剪框是否可拖拽 true or false

                    .minimumCompressSize(30)// 小于100kb的图片不压缩
                    .showCropFrame(true)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false   true or false
                    .showCropGrid(true)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false    true or false
//                .rotateEnabled(true) // 裁剪是否可旋转图片 true or false
                    .scaleEnabled(true)// 裁剪是否可放大缩小图片 true or false
                    .forResult(new MyResultCallback(mAdapter));
        }

        @Override
        public void onDelPicClick(int postion, LocalMedia localMedia) {
//            DataManager.getInstance().remove(localMedia.getId()+"")
//                    .compose(DataManager.setThread())
//                    .subscribe(new BaseObserver(ctx, new RxHttpCallBack(ctx) {
//                        @Override
//                        public void onSuccess(CommonResponseBean t) {
//                            super.onSuccess(t);
////                            list.remove(index);
//                            mAdapter.getData().remove(postion);
//                            mAdapter.notifyItemRemoved(postion);
//                            mAdapter.notifyItemRangeChanged(postion, mAdapter.getData().size());
//                        }
//                    }));
        }
    };

    /**
     * 返回结果回调
     */
    private class MyResultCallback implements OnResultCallbackListener<LocalMedia> {
        private WeakReference<GridImageAdapter> mAdapterWeakReference;

        public MyResultCallback(GridImageAdapter adapter) {
            super();
            this.mAdapterWeakReference = new WeakReference<>(adapter);
        }

        @Override
        public void onResult(List<LocalMedia> result) {
//            for (LocalMedia media : result) {
//                Log.i(TAG, "是否压缩:" + media.isCompressed());
//                Log.i(TAG, "压缩:" + media.getCompressPath());
//                Log.i(TAG, "原图:" + media.getPath());
//                Log.i(TAG, "绝对路径:" + media.getRealPath());
//                Log.i(TAG, "是否裁剪:" + media.isCut());
//                Log.i(TAG, "裁剪:" + media.getCutPath());
//                Log.i(TAG, "是否开启原图:" + media.isOriginal());
//                Log.i(TAG, "原图路径:" + media.getOriginalPath());
//                Log.i(TAG, "Android Q 特有Path:" + media.getAndroidQToPath());
//                Log.i(TAG, "宽高: " + media.getWidth() + "x" + media.getHeight());
//                Log.i(TAG, "Size: " + media.getSize());
//
//                Log.i("MMM", "onResult: " + media.toString());
//                // TODO 可以通过PictureSelectorExternalUtils.getExifInterface();方法获取一些额外的资源信息，如旋转角度、经纬度等信息
//            }
            listener.onResult(result);
            if (mAdapterWeakReference.get() != null) {
                mAdapterWeakReference.get().setList(result);
                mAdapterWeakReference.get().notifyDataSetChanged();
            }
        }

        @Override
        public void onCancel() {
//            Log.i(TAG, "PictureSelector Cancel");
        }
    }












    private PictureCropParameterStyle mCropParameterStyle;

    private PictureParameterStyle getDefaultStyle() {
        // 相册主题
        PictureParameterStyle mPictureParameterStyle = new PictureParameterStyle();
        // 是否改变状态栏字体颜色(黑白切换)
        mPictureParameterStyle.isChangeStatusBarFontColor = false;
        // 是否开启右下角已完成(0/9)风格
        mPictureParameterStyle.isOpenCompletedNumStyle = false;
        // 是否开启类似QQ相册带数字选择风格
        mPictureParameterStyle.isOpenCheckNumStyle = false;
        // 相册状态栏背景色
        mPictureParameterStyle.pictureStatusBarColor = Color.parseColor("#393a3e");
        // 相册列表标题栏背景色
        mPictureParameterStyle.pictureTitleBarBackgroundColor = Color.parseColor("#393a3e");
        // 相册父容器背景色
        mPictureParameterStyle.pictureContainerBackgroundColor = ContextCompat.getColor(ctx, R.color.black);
        // 相册列表标题栏右侧上拉箭头
        mPictureParameterStyle.pictureTitleUpResId = R.drawable.picture_icon_arrow_up;
        // 相册列表标题栏右侧下拉箭头
        mPictureParameterStyle.pictureTitleDownResId = R.drawable.picture_icon_arrow_down;
        // 相册文件夹列表选中圆点
        mPictureParameterStyle.pictureFolderCheckedDotStyle = R.drawable.picture_orange_oval;
        // 相册返回箭头
        mPictureParameterStyle.pictureLeftBackIcon = R.drawable.picture_icon_back;
        // 标题栏字体颜色
        mPictureParameterStyle.pictureTitleTextColor = ContextCompat.getColor(ctx, R.color.picture_color_white);
        // 相册右侧取消按钮字体颜色  废弃 改用.pictureRightDefaultTextColor和.pictureRightDefaultTextColor
        mPictureParameterStyle.pictureCancelTextColor = ContextCompat.getColor(ctx, R.color.picture_color_white);
        // 选择相册目录背景样式
//        mPictureParameterStyle.pictureAlbumStyle = R.drawable.picture_new_item_select_bg;
        // 相册列表勾选图片样式
        mPictureParameterStyle.pictureCheckedStyle = R.drawable.picture_checkbox_selector;
        // 相册列表底部背景色
        mPictureParameterStyle.pictureBottomBgColor = ContextCompat.getColor(ctx, R.color.picture_color_grey);
        // 已选数量圆点背景样式
        mPictureParameterStyle.pictureCheckNumBgStyle = R.drawable.picture_num_oval;
        // 相册列表底下预览文字色值(预览按钮可点击时的色值)
        mPictureParameterStyle.picturePreviewTextColor = ContextCompat.getColor(ctx, R.color.picture_color_fa632d);
        // 相册列表底下不可预览文字色值(预览按钮不可点击时的色值)
        mPictureParameterStyle.pictureUnPreviewTextColor = ContextCompat.getColor(ctx, R.color.picture_color_white);
        // 相册列表已完成色值(已完成 可点击色值)
        mPictureParameterStyle.pictureCompleteTextColor = ContextCompat.getColor(ctx, R.color.picture_color_fa632d);
        // 相册列表未完成色值(请选择 不可点击色值)
        mPictureParameterStyle.pictureUnCompleteTextColor = ContextCompat.getColor(ctx, R.color.picture_color_white);
        // 预览界面底部背景色
        mPictureParameterStyle.picturePreviewBottomBgColor = ContextCompat.getColor(ctx, R.color.picture_color_grey);
        // 外部预览界面删除按钮样式
        mPictureParameterStyle.pictureExternalPreviewDeleteStyle = R.drawable.picture_icon_delete;
        // 原图按钮勾选样式  需设置.isOriginalImageControl(true); 才有效
        mPictureParameterStyle.pictureOriginalControlStyle = R.drawable.picture_original_wechat_checkbox;
        // 原图文字颜色 需设置.isOriginalImageControl(true); 才有效
        mPictureParameterStyle.pictureOriginalFontColor = ContextCompat.getColor(ctx, R.color.white);
        // 外部预览界面是否显示删除按钮
        mPictureParameterStyle.pictureExternalPreviewGonePreviewDelete = true;
        // 设置NavBar Color SDK Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP有效
        mPictureParameterStyle.pictureNavBarColor = Color.parseColor("#393a3e");
        // 文件夹字体颜色
        mPictureParameterStyle.folderTextColor = Color.parseColor("#4d4d4d");
        // 文件夹字体大小
        mPictureParameterStyle.folderTextSize = 16;
//        // 自定义相册右侧文本内容设置
//        mPictureParameterStyle.pictureRightDefaultText = "";
//        // 自定义相册未完成文本内容
//        mPictureParameterStyle.pictureUnCompleteText = "";
//        // 自定义相册完成文本内容
//        mPictureParameterStyle.pictureCompleteText = "";
//        // 自定义相册列表不可预览文字
//        mPictureParameterStyle.pictureUnPreviewText = "";
//        // 自定义相册列表预览文字
//        mPictureParameterStyle.picturePreviewText = "";
//
//        // 自定义相册标题字体大小
//        mPictureParameterStyle.pictureTitleTextSize = 18;
//        // 自定义相册右侧文字大小
//        mPictureParameterStyle.pictureRightTextSize = 14;
//        // 自定义相册预览文字大小
//        mPictureParameterStyle.picturePreviewTextSize = 14;
//        // 自定义相册完成文字大小
//        mPictureParameterStyle.pictureCompleteTextSize = 14;
//        // 自定义原图文字大小
//        mPictureParameterStyle.pictureOriginalTextSize = 14;

        // 裁剪主题
        mCropParameterStyle = new PictureCropParameterStyle(
                ContextCompat.getColor(ctx, R.color.picture_color_grey),
                ContextCompat.getColor(ctx, R.color.picture_color_grey),
                Color.parseColor("#393a3e"),
                ContextCompat.getColor(ctx, R.color.white),
                mPictureParameterStyle.isChangeStatusBarFontColor);

        return mPictureParameterStyle;
    }

    /**
     * 相机拍照
     */
    private void doTakePhoto(Activity ctx) {

        // 裁剪主题
        mCropParameterStyle = new PictureCropParameterStyle(
                ContextCompat.getColor(ctx, R.color.picture_color_grey),
                ContextCompat.getColor(ctx, R.color.picture_color_grey),
                Color.parseColor("#393a3e"),
                ContextCompat.getColor(ctx, R.color.white),
                false);

        PictureSelector.create(ctx)
                .openCamera(PictureMimeType.ofImage())
                .imageEngine(GlideEngine.createGlideEngine())
                .setPictureCropStyle(mCropParameterStyle)// 动态自定义裁剪主题
                .minSelectNum(1)
                .maxSelectNum(1)
                .isSingleDirectReturn(true)// 单选模式下是否直接返回，PictureConfig.SINGLE模式下有效
//                .setPictureUIStyle(PictureSelectorUIStyle.ofDefaultStyle())
                .isEnableCrop(true)// 是否裁剪 true or false
                .isCompress(true)// 是否压缩 true or false
                .isGif(false)// 是否显示gif图片 true or false
                .circleDimmedLayer(false)// 是否圆形裁剪 true or false
                .freeStyleCropEnabled(true)// 裁剪框是否可拖拽 true or false
                .cutOutQuality(30)// 裁剪压缩质量 默认90 int
                .minimumCompressSize(30)// 小于100kb的图片不压缩
                .showCropFrame(true)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false   true or false
                .showCropGrid(true)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false    true or false
                .rotateEnabled(true) // 裁剪是否可旋转图片 true or false
                .scaleEnabled(true)// 裁剪是否可放大缩小图片 true or false
                .forResult(listener);



        // 单独拍照
//        PictureSelector.create(ctx)
//                .openCamera(PictureMimeType.ofAll())// 单独拍照，也可录像或也可音频 看你传入的类型是图片or视频
//                .theme(R.style.picture_default_style)// 主题样式设置 具体参考 values/styles
//                .imageEngine(GlideEngine.createGlideEngine())// 外部传入图片加载引擎，必传项
//                .maxSelectNum(1)// 最大图片选择数量
//                .minSelectNum(1)// 最小选择数量
//                .closeAndroidQChangeWH(true)//如果图片有旋转角度则对换宽高，默认为true
//                .closeAndroidQChangeVideoWH(!SdkVersionUtils.checkedAndroid_Q())// 如果视频有旋转角度则对换宽高，默认false
//                .selectionMode(cb_choose_mode.isChecked() ?
//                        PictureConfig.MULTIPLE : PictureConfig.SINGLE)// 多选 or 单选
//                .loadCacheResourcesCallback(GlideCacheEngine.createCacheEngine())// 获取图片资源缓存，主要是解决华为10部分机型在拷贝文件过多时会出现卡的问题，这里可以判断只在会出现一直转圈问题机型上使用
//                .isPreviewImage(cb_preview_img.isChecked())// 是否可预览图片
//                .isPreviewVideo(cb_preview_video.isChecked())// 是否可预览视频
//                .isEnablePreviewAudio(cb_preview_audio.isChecked()) // 是否可播放音频
//                .isCamera(cb_isCamera.isChecked())// 是否显示拍照按钮
//                .isEnableCrop(cb_crop.isChecked())// 是否裁剪
//                .isCompress(cb_compress.isChecked())// 是否压缩
//                .compressQuality(60)// 图片压缩后输出质量
//                .glideOverride(160, 160)// glide 加载宽高，越小图片列表越流畅，但会影响列表图片浏览的清晰度
//                .withAspectRatio(aspect_ratio_x, aspect_ratio_y)// 裁剪比例 如16:9 3:2 3:4 1:1 可自定义
//                .hideBottomControls(!cb_hide.isChecked())// 是否显示uCrop工具栏，默认不显示
//                .isGif(cb_isGif.isChecked())// 是否显示gif图片
//                .freeStyleCropEnabled(cb_styleCrop.isChecked())// 裁剪框是否可拖拽
//                .circleDimmedLayer(cb_crop_circular.isChecked())// 是否圆形裁剪
//                .showCropFrame(cb_showCropFrame.isChecked())// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
//                .showCropGrid(cb_showCropGrid.isChecked())// 是否显示裁剪矩形网格 圆形裁剪时建议设为false
//                .isOpenClickSound(cb_voice.isChecked())// 是否开启点击声音
//                .selectionData(mAdapter.getData())// 是否传入已选图片
//                .cutOutQuality(90)// 裁剪输出质量 默认100
//                .minimumCompressSize(100)// 小于100kb的图片不压缩
//                .forResult(new MyResultCallback(mAdapter));
    }

    //从本地相册中选择
    private void doSelectPhoto(Activity ctx) {
        PictureSelector.create(ctx)
                .openGallery(PictureMimeType.ofImage())
                .imageEngine(GlideEngine.createGlideEngine())
                .selectionMode(PictureConfig.SINGLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
                .isPreviewImage(true)// 是否可预览图片 true or fals
                .isGif(false)// 是否显示gif图片 true or false
                .isCamera(false)// 是否显示拍照按钮 true or false
                .isEnableCrop(true)// 是否裁剪 true or false
                .isCompress(true)// 是否压缩 true or false
                .circleDimmedLayer(false)// 是否圆形裁剪 true or false
                .freeStyleCropEnabled(true)// 裁剪框是否可拖拽 true or false
                .cutOutQuality(30)// 裁剪压缩质量 默认90 int
                .minimumCompressSize(30)// 小于100kb的图片不压缩
                .showCropFrame(true)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false   true or false
                .showCropGrid(true)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false    true or false
                .rotateEnabled(true) // 裁剪是否可旋转图片 true or false
                .scaleEnabled(true)// 裁剪是否可放大缩小图片 true or false
                .forResult(listener);
//                .forResult(PictureConfig.CHOOSE_REQUEST);
    }


    @Override
    public void onClick(View view) {

//        PictureSelector.create(ctx)
//                .openGallery(PictureMimeType.ofImage())
//                .imageEngine(GlideEngine.createGlideEngine())
//                .selectionMode(PictureConfig.SINGLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
//                .isSingleDirectReturn(true)
//                .maxSelectNum(1)
//                .minSelectNum(1)
//                .isPreviewImage(true)// 是否可预览图片 true or fals
//                .isGif(false)// 是否显示gif图片 true or false
//                .isCamera(true)// 是否显示拍照按钮 true or false
//                .isEnableCrop(true)// 是否裁剪 true or false
//                .isCompress(true)// 是否压缩 true or false
//                .circleDimmedLayer(false)// 是否圆形裁剪 true or false
//                .freeStyleCropEnabled(true)// 裁剪框是否可拖拽 true or false
//                .cutOutQuality(30)// 裁剪压缩质量 默认90 int
//                .minimumCompressSize(100)// 小于100kb的图片不压缩
//                .showCropFrame(true)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false   true or false
//                .showCropGrid(true)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false    true or false
//                .rotateEnabled(true) // 裁剪是否可旋转图片 true or false
//                .scaleEnabled(true)// 裁剪是否可放大缩小图片 true or false
//                .forResult(listener);


        DialogPhotoSelect dialogPhotoSelect = new DialogPhotoSelect(ctx);
        dialogPhotoSelect.show();
        dialogPhotoSelect.setOnSelectClickListener(new DialogPhotoSelect.onSelectClickListener() {
            @Override
            public void onTakePhoto() {
                doTakePhoto(ctx);
            }

            @Override
            public void onSelectPhoto() {
                doSelectPhoto(ctx);
            }
        });
    }
}
