package cc.winboll.studio.powerbell.unittest;

import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.ToastUtils;
import cc.winboll.studio.powerbell.MainActivity;
import cc.winboll.studio.powerbell.R;
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
import cc.winboll.studio.powerbell.utils.FileUtils;
import cc.winboll.studio.powerbell.utils.ImageCropUtils;
import cc.winboll.studio.powerbell.views.BackgroundView;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import cc.winboll.studio.powerbell.models.BackgroundBean;

/**
 * 终极修复版：放弃FileProvider，直接用私有目录File路径，彻底解决UID冲突
 */
public class MainUnitTestActivity extends AppCompatActivity {
    // ====================== 常量定义 ======================
    public static final String TAG = "MainUnitTestActivity";
    public static final int REQUEST_CROP_IMAGE = 0;
    private static final String ASSETS_TEST_IMAGE_PATH = "unittest/unittest-miku.png";

    // ====================== 成员变量（移除所有Uri相关） ======================
    private BackgroundView mBackgroundView;
    private String mAppPrivateDirPath;
    private File mPrivateTestImageFile; // 仅用File，不用Uri
    private File mPrivateCropImageFile;
	BackgroundBean mPreviewBackgroundBean;

    // ====================== 生命周期方法 ======================
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LogUtils.d(TAG, "=== 页面 onCreate 启动 ===");

        initBaseParams();
        initViewAndEvent();
        copyAssetsTestImageToPrivateDir();
        //loadBackgroundByFile(); // 直接用File加载
		mPreviewBackgroundBean = new BackgroundBean();
		mPreviewBackgroundBean.setBackgroundFileName(mPrivateTestImageFile.getName());
		mPreviewBackgroundBean.setBackgroundFilePath(mPrivateTestImageFile.getAbsolutePath());
		mPreviewBackgroundBean.setBackgroundScaledCompressFileName(mPrivateCropImageFile.getName());
		mPreviewBackgroundBean.setBackgroundScaledCompressFilePath(mPrivateCropImageFile.getAbsolutePath());
		mPreviewBackgroundBean.setIsUseBackgroundFile(true);
		doubleRefreshPreview();
		
        ToastUtils.show("单元测试页面启动完成");
        LogUtils.d(TAG, "=== 页面 onCreate 初始化结束 ===");
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        LogUtils.d(TAG, "=== onActivityResult 回调 ===");
        if (requestCode == REQUEST_CROP_IMAGE) {
            handleCropResult(resultCode);
        }
    }

    // ====================== 初始化相关方法 ======================
    private void initBaseParams() {
        LogUtils.d(TAG, "初始化基础参数：工具类+私有目录+File");

        // 私有目录（无需权限，无UID冲突）
        mAppPrivateDirPath = getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/PowerBellTest/";
        File privateDir = new File(mAppPrivateDirPath);
        if (!privateDir.exists()) {
            privateDir.mkdirs();
            LogUtils.d(TAG, "创建私有目录：" + mAppPrivateDirPath);
        }

        // 初始化File（无Uri）
        File refFile = new File(ASSETS_TEST_IMAGE_PATH);
        String uniqueTestName = FileUtils.createUniqueFileName(refFile) + ".png";
        String uniqueCropName = uniqueTestName.replace(".png", "_crop.png");
        mPrivateTestImageFile = new File(mAppPrivateDirPath, uniqueTestName);
        mPrivateCropImageFile = new File(mAppPrivateDirPath, uniqueCropName);

        LogUtils.d(TAG, "测试图File路径：" + mPrivateTestImageFile.getAbsolutePath());
    }

    private void initViewAndEvent() {
        LogUtils.d(TAG, "初始化布局与控件事件");
        setContentView(R.layout.activity_mainunittest);
        mBackgroundView = (BackgroundView) findViewById(R.id.backgroundview);

        // 跳转主页面按钮
        Button btnMain = (Button) findViewById(R.id.btn_main_activity);
        btnMain.setOnClickListener(new View.OnClickListener() {
				@Override
				public void onClick(View v) {
					LogUtils.d(TAG, "点击按钮：跳转主页面");
					startActivity(new Intent(MainUnitTestActivity.this, MainActivity.class));
				}
			});

        // 裁剪按钮（直接用File路径启动，无Uri）
        Button btnCrop = (Button) findViewById(R.id.btn_test_cropimage);
        btnCrop.setOnClickListener(new View.OnClickListener() {
				@Override
				public void onClick(View v) {
					LogUtils.d(TAG, "点击按钮：启动裁剪（File路径版）");
					ToastUtils.show("准备启动图片裁剪");

					if (mPrivateTestImageFile.exists() && mPrivateTestImageFile.length() > 100) {
						startCropTestByFile(); // 直接传File
					} else {
						ToastUtils.show("测试图片未准备好，重新拷贝");
						copyAssetsTestImageToPrivateDir();
					}
				}
			});
    }

    // 从assets拷贝图片（不变，确保File存在）
    private void copyAssetsTestImageToPrivateDir() {
        LogUtils.d(TAG, "开始拷贝assets图片到私有目录");
        if (mPrivateTestImageFile.exists() && mPrivateTestImageFile.length() > 100) {
            LogUtils.d(TAG, "图片已存在，无需拷贝");
            return;
        }

        InputStream inputStream = null;
        try {
            inputStream = getAssets().open(ASSETS_TEST_IMAGE_PATH);
            FileUtils.copyStreamToFile(inputStream, mPrivateTestImageFile);
            LogUtils.d(TAG, "图片拷贝成功，大小：" + mPrivateTestImageFile.length() + "字节");
        } catch (IOException e) {
            LogUtils.e(TAG, "图片拷贝失败：" + e.getMessage(), e);
            ToastUtils.show("图片准备失败");
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    LogUtils.e(TAG, "关闭流失败：" + e.getMessage());
                }
            }
        }
    }

    // ====================== 核心业务方法（全改为File路径） ======================
    /** 直接用File路径加载背景图（无Uri，无冲突） */
//    private void loadBackgroundByFile() {
//        LogUtils.d(TAG, "开始加载背景图（File路径版）");
//        if (mPrivateTestImageFile.exists() && mPrivateTestImageFile.length() > 100) {
//            mBackgroundView.loadImage(mPrivateTestImageFile.getAbsolutePath()); // 直接传路径
//            LogUtils.d(TAG, "背景图加载成功：" + mPrivateTestImageFile.getAbsolutePath());
//            ToastUtils.show("背景图加载成功");
//        } else {
//            LogUtils.e(TAG, "背景图加载失败：文件无效");
//            ToastUtils.show("背景图加载失败");
//        }
//    }

    /** 直接用File启动裁剪（关键：调用ImageCropUtils的File重载方法） */
    private void startCropTestByFile() {
        LogUtils.d(TAG, "启动裁剪（File路径版），原图：" + mPrivateTestImageFile.getAbsolutePath());

        // 确保输出目录存在
        File cropParent = mPrivateCropImageFile.getParentFile();
        if (!cropParent.exists()) {
            cropParent.mkdirs();
        }

        // 调用ImageCropUtils的File参数方法（核心：绕开Uri）
        ImageCropUtils.startImageCrop(
            this,
            mPrivateTestImageFile, // 原图File
            mPrivateCropImageFile, // 输出File
            0,
            0,
            true,
            REQUEST_CROP_IMAGE
        );

        LogUtils.d(TAG, "裁剪请求已发送，输出路径：" + mPrivateCropImageFile.getAbsolutePath());
        ToastUtils.show("已启动图片裁剪");
    }

    /** 处理裁剪结果（直接校验输出File） */
    private void handleCropResult(int resultCode) {
        LogUtils.d(TAG, "裁剪回调处理：resultCode=" + resultCode);
        if (resultCode == RESULT_OK) {
            if (mPrivateCropImageFile.exists() && mPrivateCropImageFile.length() > 100) {
                mBackgroundView.loadImage(mPrivateCropImageFile.getAbsolutePath());
                LogUtils.d(TAG, "裁剪成功，加载裁剪图：" + mPrivateCropImageFile.getAbsolutePath());
                ToastUtils.show("裁剪成功");
				mPreviewBackgroundBean.setIsUseBackgroundScaledCompressFile(true);
				doubleRefreshPreview();
            } else {
                LogUtils.e(TAG, "裁剪成功但输出文件无效");
                ToastUtils.show("裁剪失败：输出文件无效");
            }
        } else if (resultCode == RESULT_CANCELED) {
            LogUtils.d(TAG, "裁剪取消");
            ToastUtils.show("裁剪已取消");
        } else {
            LogUtils.e(TAG, "裁剪失败：resultCode异常");
            ToastUtils.show("裁剪失败");
        }
    }
	

    /**
     * 双重刷新预览，确保背景加载最新数据
     * 移除：缓存清空逻辑
     */
    private void doubleRefreshPreview() {
        
        // 第一重刷新
        try {
            mBackgroundView.loadByBackgroundBean(mPreviewBackgroundBean, true);
			mBackgroundView.setBackgroundColor(mPreviewBackgroundBean.getPixelColor());
            LogUtils.d(TAG, "【双重刷新】第一重完成");
        } catch (Exception e) {
            LogUtils.e(TAG, "【双重刷新】第一重异常：" + e.getMessage());
            return;
        }

        // 第二重刷新（延迟执行）
        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
				@Override
				public void run() {
					if (mBackgroundView != null && !isFinishing()) {
						try {
							mBackgroundView.loadByBackgroundBean(mPreviewBackgroundBean, true);
							mBackgroundView.setBackgroundColor(mPreviewBackgroundBean.getPixelColor());
							LogUtils.d(TAG, "【双重刷新】第二重完成");
						} catch (Exception e) {
							LogUtils.e(TAG, "【双重刷新】第二重异常：" + e.getMessage());
						}
					}
				}
			}, 200);
    }
}

