
package com.iwhalecloud.picedit;

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.dyh.rnpicture.edit.AddWatermarkActivity;
import com.dyh.rnpicture.utils.Constants;
import com.dyh.rnpicture.utils.FileUtils;
import com.dyh.rnpicture.utils.FrameFilterUtils;
import com.dyh.rnpicture.utils.SimpleThreadManager;
import com.facebook.react.bridge.ActivityEventListener;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.runtimepermission.PermissionsManager;
import com.runtimepermission.PermissionsResultAction;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

import static android.app.Activity.RESULT_OK;

public class RNPicEditModule extends ReactContextBaseJavaModule implements ActivityEventListener {

    private final ReactApplicationContext reactContext;

    private String selectedImagePath;

    ArrayList<String> arrayList;

    private Class intentClass;

    /* 旋转 */
    private static final int PHOTO_REVOLVE_WITH_DATA = 3030;

    /* 剪切 */
    private static final int PHOTO_CROP_WITH_DATA = 3027;

    /* 添加水印图片 */
    private static final int PHOTO_ADD_WATERMARK_DATA = 3032;

    private int intentType;

    private Callback picCallBack;

    private int maxSize = 2048;

    public RNPicEditModule(ReactApplicationContext reactContext) {
        super(reactContext);
        this.reactContext = reactContext;
        this.reactContext.addActivityEventListener(this);
    }

    @Override
    public String getName() {
        return "PhotoEditer";
    }

    @ReactMethod
    public void openPicEdit(ReadableMap readableMap, final Callback resultCallBack) {

        String[] strs = {
            Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE
        };
        PermissionsManager.getInstance().requestPermissionsIfNecessaryForResult(getActivity(), strs,
            new PermissionsResultAction() {
                @Override
                public void onGranted() {
                    HashMap<String, Object> map = readableMap.toHashMap();
                    selectedImagePath = (String) map.get("orign");
                    Log.i("dyh", selectedImagePath);
                    String maxSizeStr = (String) map.get("maxSize");
                    int iconSize = ((Double) map.get("iconsNumber")).intValue();
                    if (iconSize > 5) {
                        Toast.makeText(reactContext, reactContext.getString(R.string.size_number), Toast.LENGTH_SHORT)
                            .show();
                    }
                    boolean scale = (boolean) map.get("scale");
                    Log.i("dyh", maxSizeStr);
                    maxSize = Integer.parseInt(maxSizeStr);
                    arrayList = (ArrayList<String>) map.get("icons");
                    intentClass = AddWatermarkActivity.class;
                    intentType = PHOTO_ADD_WATERMARK_DATA;
                    Intent photoFrameIntent = new Intent(getActivity(), intentClass);
                    photoFrameIntent.putExtra("iconSize", iconSize);
                    photoFrameIntent.putExtra("scale", scale);
                    editActivity(photoFrameIntent);
                    picCallBack = resultCallBack;
                }

                @Override
                public void onDenied(String permission) {
                    Toast.makeText(getActivity(), "缺少" + permission, Toast.LENGTH_SHORT).show();

                }
            });
    }

    @ReactMethod
    public void clear()
    {
        SimpleThreadManager.getThreadPollProxy().execute(new Runnable() {
            @Override
            public void run() {
                try {
                    FileUtils.DeleteFolder(Constants.filePath);
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });


    }


        @Override
    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
        if (resultCode != RESULT_OK) {
            return;
        }

        switch (requestCode) {
            case PHOTO_CROP_WITH_DATA:
            case PHOTO_REVOLVE_WITH_DATA:
            case PHOTO_ADD_WATERMARK_DATA:

                String resultPath = data.getStringExtra("camera_path");
                // Bitmap resultBitmap = BitmapFactory.decodeFile(resultPath);
                // photoEditImageView.setImageBitmap(resultBitmap);
                Bitmap bitmap = null;
                try {
                    bitmap = FrameFilterUtils.compressForQuality(resultPath, maxSize);
                }
                catch (Exception e1) {
                }
                JSONObject jsonObject=new JSONObject();
                try
                {
                    jsonObject.putOpt("data", FrameFilterUtils.bitmapToBase64(bitmap));
                    jsonObject.putOpt("uri",resultPath);
                } catch (JSONException e)
                {
                    e.printStackTrace();
                }

                picCallBack.invoke(jsonObject.toString());
                break;

            default:
                break;
        }
    }

    @Override
    public void onNewIntent(Intent intent) {

    }

    public Activity getActivity() {
        return reactContext.getCurrentActivity();
    }

    public void editActivity(Intent photoFrameIntent) {
        if (selectedImagePath == null) {
            Toast.makeText(getActivity(), "请选择图片", Toast.LENGTH_SHORT).show();
            return;
        }
        if (intentClass == null) {
            Toast.makeText(getActivity(), "请图片操作类型", Toast.LENGTH_SHORT).show();
            return;
        }
        // 将图片路径photoPath传到所要调试的模块
        photoFrameIntent.putExtra("camera_path", selectedImagePath);
        Bundle b = new Bundle();
        String[] array = arrayList.toArray(new String[arrayList.size()]);
        b.putStringArray("icons", array);
        photoFrameIntent.putExtras(b);
        getActivity().startActivityForResult(photoFrameIntent, intentType);
    }
}