package cc.winboll.studio.powerbell.unittest;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
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.ImageCropUtils;
import cc.winboll.studio.powerbell.views.BackgroundView;
import java.io.File;

/**
 * @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
 * @Date 2025/11/19 18:04
 * @Describe 单元测试启动主页窗口
 */
public class MainUnitTestActivity extends AppCompatActivity {

    public static final String TAG = "MainUnitTestActivity";
    public static final int REQUEST_CROP_IMAGE = 0;
    // 新增：权限请求码
    public static final int REQUEST_STORAGE_PERMISSION = 1001;
    View mainView;
    BackgroundSourceUtils mBgSourceUtils;
    BackgroundView mBackgroundView;
    // 测试图片路径（用Environment获取，适配低版本，避免硬编码）
    String szTestSource = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
	+ "/PowerBell/unittest/1764946782079.jpeg";
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		
        mBgSourceUtils = BackgroundSourceUtils.getInstance(this);
        mBgSourceUtils.loadSettings();
		
        setContentView(R.layout.activity_mainunittest);
		
        mBackgroundView = findViewById(R.id.backgroundview);

        ((Button)findViewById(R.id.btn_main_activity)).setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainUnitTestActivity.this, MainActivity.class));
            }
        });

        // 裁剪测试按钮点击事件（新增权限校验）
        ((Button)findViewById(R.id.btn_test_cropimage)).setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                ToastUtils.show("onClick：准备启动裁剪");
                LogUtils.d(TAG, "【裁剪测试】点击裁剪按钮，校验权限");
                
                // 修复1：移除高版本API依赖，适配低版本存储权限校验
                if (checkStoragePermission()) {
                    // 权限已授予，启动裁剪
                    startCropTest();
                } else {
                    // 权限未授予，申请权限
                    requestStoragePermission();
                }
            }
        });
		
        ToastUtils.show(String.format("%s onCreate", TAG));
        // 加载测试图片（验证图片路径是否有效）
        loadBackground();
    }

    /**
     * 启动裁剪测试（抽取为单独方法，便于权限回调后调用）
     */
    private void startCropTest() {
        // 修复2：输出路径用Environment获取，确保目录存在（避免路径无效）
        File outputDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
                + "/PowerBell/unittest/");
        if (!outputDir.exists()) {
            outputDir.mkdirs(); // 创建目录（避免输出路径不存在导致裁剪失败）
            LogUtils.d(TAG, "【裁剪测试】创建输出目录：" + outputDir.getAbsolutePath());
        }
        String dstOutputPath = outputDir.getAbsolutePath() 
			+ "/1764946782079-crop.jpeg";

        // 修复3：自由裁剪时比例传0（避免100:100过大导致机型崩溃）
        ImageCropUtils.startImageCrop(
                MainUnitTestActivity.this, 
                new File(szTestSource), 
                new File(dstOutputPath), 
                0, // 自由裁剪传0
                0, // 自由裁剪传0
                true, 
                REQUEST_CROP_IMAGE
        );
    }

    /**
     * 校验存储读写权限（适配Android 6.0+ 低版本SDK，移除TIRAMISU依赖）
     */
    private boolean checkStoragePermission() {
        // 适配Android 6.0（API 23）及以上，用通用的读写权限（移除高版本API）
        return ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED
                && ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED;
    }

    /**
     * 申请存储读写权限（适配低版本SDK，移除READ_MEDIA_IMAGES依赖）
     */
    private void requestStoragePermission() {
        LogUtils.d(TAG, "【裁剪测试】申请存储读写权限");
        // 用通用的读写权限（适配所有Android 6.0+ 机型，无高版本依赖）
        ActivityCompat.requestPermissions(
                this,
                new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE},
                REQUEST_STORAGE_PERMISSION
        );
    }

    /**
     * 权限申请回调
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_STORAGE_PERMISSION) {
            // 校验权限是否授予
            boolean allGranted = true;
            for (int result : grantResults) {
                if (result != PackageManager.PERMISSION_GRANTED) {
                    allGranted = false;
                    break;
                }
            }
            if (allGranted) {
                ToastUtils.show("存储权限已授予，启动裁剪");
                startCropTest(); // 权限授予后启动裁剪
            } else {
                ToastUtils.show("存储权限被拒绝，无法启动裁剪");
                LogUtils.e(TAG, "【裁剪测试】存储权限被拒绝");
            }
        }
    }

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
        LogUtils.d(TAG, "【裁剪回调】requestCode：" + requestCode + "，resultCode：" + resultCode + "，data：" + (data == null ? "null" : data.toString()));
		ToastUtils.show(String.format("requestCode %d, resultCode %d, data is %s",requestCode, resultCode, data == null));
        // 裁剪完成后回收权限
        if (requestCode == REQUEST_CROP_IMAGE) {
            String dstOutputPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
                    + "/PowerBell/unittest/1764946782079-crop.jpeg";
            //Uri outputUri = ImageCropUtils.getFileProviderUriPublic(this, new File(dstOutputPath));
            //ImageCropUtils.releaseCropPermission(this, outputUri);
			mBackgroundView.loadImage(dstOutputPath);
        }
	}
	
	void loadBackground() {
        // 校验测试图片是否存在（避免路径错误）
        File testFile = new File(szTestSource);
        if (testFile.exists() && testFile.length() > 100) {
            mBackgroundView.loadImage(szTestSource);
            LogUtils.d(TAG, "【图片加载】测试图片加载成功：" + szTestSource);
        } else {
            ToastUtils.show("测试图片不存在或无效");
            LogUtils.e(TAG, "【图片加载】测试图片无效：" + szTestSource);
        }
	}
}

