package cc.winboll.studio.powerbell;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.RelativeLayout;
import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libaes.views.ADsBannerView;
import cc.winboll.studio.libappbase.LogActivity;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.powerbell.activities.AboutActivity;
import cc.winboll.studio.powerbell.activities.BackgroundPictureActivity;
import cc.winboll.studio.powerbell.activities.BatteryReportActivity;
import cc.winboll.studio.powerbell.activities.ClearRecordActivity;
import cc.winboll.studio.powerbell.activities.WinBoLLActivity;
import cc.winboll.studio.powerbell.beans.BackgroundPictureBean;
import cc.winboll.studio.powerbell.fragments.MainViewFragment;
import cc.winboll.studio.powerbell.unittest.MainUnitTestActivity;
import cc.winboll.studio.powerbell.utils.BackgroundPictureUtils;

/**
 * 主活动类（修复小米广告SDK空Context崩溃问题）
 * 核心修改点：
 * 1. 添加全局Context安全校验
 * 2. 优化广告请求的生命周期判断
 * 3. 确保广告操作在主线程执行
 * 4. 完善广告资源释放逻辑
 */
public class MainActivity extends WinBoLLActivity {

    public static final String TAG = "MainActivity";

    private static final int REQUEST_WRITE_STORAGE_PERMISSION = 1001;

//    private static final String PRIVACY_FILE = "privacy_pfs";
//    private static final String PRIVACY_VALUE = "privacy_value";//0: 拒绝，1：赞同
//
//    private SharedPreferences mSharedPreferences;
//
//    private String BANNER_POS_ID = "802e356f1726f9ff39c69308bfd6f06a";
//    private String BANNER_POS_ID_WINBOLL_BETA = "d129ee5a263911f981a6dc7a9802e3e7";
//    private String BANNER_POS_ID_WINBOLL = "4ec30efdb32271765b9a4efac902828b";

//    private BannerAd mBannerAd;
//    private List<BannerAd> mAllBanners = new ArrayList<>();
//
//    private ViewGroup mContainer;
//
//    private boolean mIsBiddingWin = true;
//
//    public static final int BACKGROUND_PICTURE_REQUEST_CODE = 0;

    public static MainActivity _mMainActivity;
    private App mApplication;
    private Menu mMenu;
    private Fragment mCurrentShowFragment;
    private MainViewFragment mMainViewFragment;
    private Toolbar mToolbar;
    // 新增：主线程Handler，确保广告操作在主线程执行
    //private Handler mMainHandler;
	ADsBannerView mADsBannerView;

    @Override
    public Activity getActivity() {
        return this;
    }

    @Override
    public String getTag() {
        return TAG;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        LogUtils.d(TAG, "onCreate(...)");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
		mADsBannerView = findViewById(R.id.adsbanner);

//        mContainer = findViewById(R.id.ads_container);
//
//        // 初始化主线程Handler（关键：确保广告操作在主线程执行）
//        mMainHandler = new Handler(Looper.getMainLooper());
//
//        // 米盟模块：隐私协议弹窗
//        showPrivacy();

        _mMainActivity = this;
        mApplication = (App) getApplication();

        // 初始化工具栏
        mToolbar = findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        mToolbar.setTitleTextAppearance(this, R.style.Toolbar_TitleText);

        // 初始化主Fragment
        if (mMainViewFragment == null) {
            FragmentTransaction tx = getFragmentManager().beginTransaction();
            mMainViewFragment = new MainViewFragment();
            tx.add(R.id.activitymainFrameLayout1, mMainViewFragment, MainViewFragment.TAG);
            tx.commit();
        }
        showFragment(mMainViewFragment);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
//        // 修复：释放广告资源，避免内存泄漏
//        releaseAdResources();
        // 置空静态引用，避免内存泄漏
        _mMainActivity = null;
//        // 移除Handler回调
//        if (mMainHandler != null) {
//            mMainHandler.removeCallbacksAndMessages(null);
//        }
		if (mADsBannerView != null) {
			mADsBannerView.releaseAdResources();
		}
    }
//
//    /**
//     * 释放广告资源（关键：避免内存泄漏和空Context调用）
//     */
//    private void releaseAdResources() {
//        LogUtils.d(TAG, "releaseAdResources()");
//        // 销毁所有广告实例
//        if (mAllBanners != null && !mAllBanners.isEmpty()) {
//            for (BannerAd ad : mAllBanners) {
//                if (ad != null) {
//                    ad.destroy();
//                }
//            }
//            mAllBanners.clear();
//        }
//        // 置空当前广告引用
//        mBannerAd = null;
//        // 移除广告容器中的视图
//        if (mContainer != null) {
//            mContainer.removeAllViews();
//        }
//    }

    void showFragment(Fragment fragment) {
        FragmentTransaction tx = getFragmentManager().beginTransaction();
        for (Fragment item : getFragmentManager().getFragments()) {
            tx.hide(item);
        }
        tx.show(fragment);
        tx.commit();
        mCurrentShowFragment = fragment;
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        reloadBackground();
    }

    public static void reloadBackground() {
        // 修复：添加非空校验，避免Activity已销毁时调用
        if (_mMainActivity != null && !_mMainActivity.isFinishing() && !_mMainActivity.isDestroyed()) {
            _mMainActivity.mMainViewFragment.reloadBackground();
        }
    }

    /**
     * 通过Uri获取文件在本地存储的真实路径
     */
    private String getRealPathFromURI(Uri contentUri) {
        String[] proj = {MediaStore.MediaColumns.DATA};
        Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
        if (cursor != null && cursor.moveToNext()) {
            int nColumnIndex = cursor.getColumnIndex(MediaStore.MediaColumns.DATA);
            if (nColumnIndex > -1) {
                String path = cursor.getString(nColumnIndex);
                cursor.close();
                return path;
            } else {
                LogUtils.d(TAG, "getRealPathFromURI nColumnIndex is -1.");
            }
            cursor.close();
        }
        return null;
    }

    @Override
    protected void onResume() {
        super.onResume();
        reloadBackground();
        setBackgroundColor();
		if (mADsBannerView != null) {
			mADsBannerView.resumeADs();
		}

//        // 修复：优化广告请求逻辑（添加生命周期判断 + 主线程执行）
//        if (!isFinishing() && !isDestroyed()) {
//			String privacyAgreeValue = getSharedPreferences().getString(PRIVACY_VALUE, null);
//			if (TextUtils.equals(privacyAgreeValue, String.valueOf(1))) {
//				LogUtils.i(TAG, "已同意隐私协议，开始播放米盟广告...");
//				mMainHandler.postDelayed(new Runnable() {
//						@Override
//						public void run() {
//							// 再次校验生命周期，避免延迟执行时Activity已销毁
//							if (!isFinishing() && !isDestroyed()) {
//								fetchAd();
//							}
//						}
//					}, 1000); // 延迟1秒请求广告，提升页面加载体验
//			}
//
//        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        mMenu = menu;
        getMenuInflater().inflate(R.menu.toolbar_main, mMenu);
		if (App.isDebugging()) {
			getMenuInflater().inflate(R.menu.toolbar_unittest, mMenu);
		}
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        int menuItemId = item.getItemId();
        if (menuItemId == R.id.action_about) {
            startActivity(new Intent(this, AboutActivity.class));
        } else if (menuItemId == R.id.action_battery_report) {
            startActivity(new Intent(this, BatteryReportActivity.class));
        } else if (menuItemId == R.id.action_clearrecord) {
            startActivity(new Intent(this, ClearRecordActivity.class));
        } else if (menuItemId == R.id.action_changepicture) {
            startActivity(new Intent(this, BackgroundPictureActivity.class));
        } else if (menuItemId == R.id.action_log) {
            LogActivity.startLogActivity(this);
        } else if (menuItemId == R.id.action_unittestactivity) {
            startActivity(new Intent(this, MainUnitTestActivity.class));
        }
        return true;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
//        if (requestCode == BACKGROUND_PICTURE_REQUEST_CODE) {
//            if (resultCode == RESULT_OK) {
//                Toast.makeText(getApplicationContext(), "OK", Toast.LENGTH_SHORT).show();
//            }
//        } else {
//            String sz = "Unsolved requestCode = " + Integer.toString(requestCode);
//            Toast.makeText(getApplicationContext(), sz, Toast.LENGTH_SHORT).show();
//            LogUtils.d(TAG, sz);
//        }
    }

    @Override
    public void onBackPressed() {
        if (mCurrentShowFragment != mMainViewFragment) {
            showFragment(mMainViewFragment);
        } else {
            moveTaskToBack(true);
        }
    }

    void setBackgroundColor() {
        // 修复：添加Activity非空校验
        if (isFinishing() || isDestroyed()) {
            return;
        }
        BackgroundPictureUtils utils = BackgroundPictureUtils.getInstance(this);
        BackgroundPictureBean bean = utils.getBackgroundPictureBean();
        int nPixelColor = bean.getPixelColor();
        RelativeLayout mainLayout = findViewById(R.id.activitymainRelativeLayout1);
        if (mainLayout != null) {
            mainLayout.setBackgroundColor(nPixelColor);
        }
    }
//
//    /**
//     * 显示广告（核心修复：传递安全的Context + 生命周期校验）
//     */
//    private void showAd() {
//        LogUtils.d(TAG, "showAd()");
//        // 1. 生命周期校验：避免Activity已销毁时操作UI
//        if (isFinishing() || isDestroyed()) {
//            LogUtils.e(TAG, "showAd: Activity is finishing or destroyed");
//            return;
//        }
//        // 2. 非空校验：广告实例和容器
//        if (mBannerAd == null || mContainer == null) {
//            LogUtils.e(TAG, "showAd: BannerAd or Container is null");
//            return;
//        }
//        // 3. 创建广告容器（使用ApplicationContext避免内存泄漏）
//        final FrameLayout container = new FrameLayout(getApplicationContext());
//        container.setPadding(0, 0, 0, MimoUtils.dpToPx(this, 10));
//        mContainer.addView(container, new FrameLayout.LayoutParams(
//							   FrameLayout.LayoutParams.MATCH_PARENT,
//							   FrameLayout.LayoutParams.WRAP_CONTENT
//						   ));
//
//        if (mIsBiddingWin) {
//            mBannerAd.setPrice(getPrice());
//        }
//        // 4. 显示广告：传递ApplicationContext，避免Activity Context失效
//        mBannerAd.showAd(MainActivity.this, container, new BannerAd.BannerInteractionListener() {
//				@Override
//				public void onAdClick() {
//					LogUtils.d(TAG, "onAdClick");
//				}
//
//				@Override
//				public void onAdShow() {
//					LogUtils.d(TAG, "onAdShow");
//				}
//
//				@Override
//				public void onAdDismiss() {
//					LogUtils.d(TAG, "onAdDismiss");
//					// 修复：移除容器时校验Activity状态
//					if (!isFinishing() && !isDestroyed() && mContainer != null) {
//						mContainer.removeView(container);
//					}
//				}
//
//				@Override
//				public void onRenderSuccess() {
//					LogUtils.d(TAG, "onRenderSuccess");
//				}
//
//				@Override
//				public void onRenderFail(int code, String msg) {
//					LogUtils.e(TAG, "onRenderFail errorCode " + code + " errorMsg " + msg);
//					// 修复：渲染失败时移除容器
//					if (!isFinishing() && !isDestroyed() && mContainer != null) {
//						mContainer.removeView(container);
//					}
//				}
//			});
//    }
//
//    /**
//     * 请求广告（核心修复：Context安全校验 + 异常捕获 + 资源管理）
//     */
//    private void fetchAd() {
//        LogUtils.d(TAG, "fetchAd()");
//        // 1. 双重校验：Activity未销毁 + Context非空
//        if (isFinishing() || isDestroyed() || getApplicationContext() == null) {
//            LogUtils.e(TAG, "fetchAd: Invalid Context or Activity state");
//            return;
//        }
//        // 2. 释放之前的广告资源，避免内存泄漏
//        if (mBannerAd != null) {
//            mBannerAd.destroy();
//        }
//        // 3. 初始化广告（使用ApplicationContext，避免Activity Context失效）
//        try {
//            mBannerAd = new BannerAd();
//            mAllBanners.add(mBannerAd);
//        } catch (Exception e) {
//            LogUtils.e(TAG, "fetchAd: Init BannerAd failed", e);
//            return;
//        }
//        // 4. 设置下载监听
//        mBannerAd.setDownLoadListener(new BannerAd.BannerDownloadListener() {
//				@Override
//				public void onDownloadStarted() {
//					LogUtils.d(TAG, "onDownloadStarted");
//				}
//
//				@Override
//				public void onDownloadPaused() {
//					LogUtils.d(TAG, "onDownloadPaused");
//				}
//
//				@Override
//				public void onDownloadFailed(int errorCode) {
//					LogUtils.d(TAG, "onDownloadFailed, errorCode = " + errorCode);
//				}
//
//				@Override
//				public void onDownloadFinished() {
//					LogUtils.d(TAG, "onDownloadFinished");
//				}
//
//				@Override
//				public void onDownloadProgressUpdated(int progress) {
//					LogUtils.d(TAG, "onDownloadProgressUpdated " + progress + "%");
//				}
//
//				@Override
//				public void onInstallFailed(int errorCode) {
//					LogUtils.d(TAG, "onInstallFailed, errorCode = " + errorCode);
//				}
//
//				@Override
//				public void onInstallStart() {
//					LogUtils.d(TAG, "onInstallStart");
//				}
//
//				@Override
//				public void onInstallSuccess() {
//					LogUtils.d(TAG, "onInstallSuccess");
//				}
//
//				@Override
//				public void onDownloadCancel() {
//					LogUtils.d(TAG, "onDownloadCancel");
//				}
//			});
//
//        // 5. 构建广告参数并请求
//        String currentAD_ID = getAD_ID();
//        LogUtils.d(TAG, String.format("currentAD_ID = %s", currentAD_ID));
//        ADParams params = new ADParams.Builder().setUpId(currentAD_ID).build();
//        mBannerAd.loadAd(params, new BannerAd.BannerLoadListener() {
//				@Override
//				public void onBannerAdLoadSuccess() {
//					LogUtils.d(TAG, "onBannerAdLoadSuccess()");
//					// 修复：广告加载成功后校验Activity状态
//					if (!isFinishing() && !isDestroyed()) {
//						showAd();
//					}
//				}
//
//				@Override
//				public void onAdLoadFailed(int errorCode, String errorMsg) {
//					LogUtils.e(TAG, "onAdLoadFailed: errorCode = " + errorCode + ", errorMsg = " + errorMsg);
//					// 修复：加载失败时移除当前广告实例
//					if (mAllBanners.contains(mBannerAd)) {
//						mAllBanners.remove(mBannerAd);
//					}
//					mBannerAd.destroy();
//					mBannerAd = null;
//				}
//			});
//    }
//
//    /**
//     * 根据当前秒数获取广告ID（原逻辑保留）
//     */
//    private String getAD_ID() {
//        long currentSecond = System.currentTimeMillis() / 1000;
//        return (currentSecond % 2 == 0) ? BANNER_POS_ID :
//			(BuildConfig.DEBUG ? BANNER_POS_ID_WINBOLL_BETA : BANNER_POS_ID_WINBOLL);
//    }
//
//    /**
//     * 获取广告价格（原逻辑保留，添加空指针校验）
//     */
//    private long getPrice() {
//        if (mBannerAd == null) {
//            return 0;
//        }
//        Map<String, Object> map = mBannerAd.getMediaExtraInfo();
//        if (map == null || map.isEmpty() || !map.containsKey("price")) {
//            LogUtils.w(TAG, "getPrice: media extra info is null or no price key");
//            return 0;
//        }
//        Object priceObj = map.get("price");
//        if (priceObj instanceof Long) {
//            return (Long) priceObj;
//        } else if (priceObj instanceof Integer) {
//            return ((Integer) priceObj).longValue();
//        } else {
//            LogUtils.e(TAG, "getPrice: price type is invalid");
//            return 0;
//        }
//    }
//
//    /**
//     * 显示隐私协议弹窗（原逻辑保留，优化Context使用）
//     */
//    private void showPrivacy() {
//        // 校验Activity状态，避免弹窗泄露
//        if (isFinishing() || isDestroyed()) {
//            return;
//        }
//        String privacyAgreeValue = getSharedPreferences().getString(PRIVACY_VALUE, null);
//        if (TextUtils.equals(privacyAgreeValue, String.valueOf(0))) {
//            LogUtils.i(TAG, "已拒绝隐私协议，广告已处于不可用状态...");
//            Toast.makeText(getApplicationContext(), "已拒绝隐私协议，广告已处于不可用状态", Toast.LENGTH_SHORT).show();
//            return;
//        }
//        if (TextUtils.equals(privacyAgreeValue, String.valueOf(1))) {
//            LogUtils.i(TAG, "已同意隐私协议，开始初始化米盟SDK...");
//            initMimoSdk();
//            return;
//        }
//        LogUtils.i(TAG, "开始弹出隐私协议...");
//        AlertDialog.Builder builder = new AlertDialog.Builder(this);
//        builder.setTitle("用户须知");
//        builder.setMessage("小米广告SDK隐私政策: https://dev.mi.com/distribute/doc/details?pId=1688, 请复制到浏览器查看");
//        builder.setIcon(R.drawable.ic_launcher);
//        builder.setCancelable(false); // 点击对话框以外的区域不消失
//        builder.setPositiveButton("同意", new DialogInterface.OnClickListener() {
//				@Override
//				public void onClick(DialogInterface dialog, int which) {
//					getSharedPreferences().edit()
//                        .putString(PRIVACY_VALUE, String.valueOf(1))
//                        .apply();
//					initMimoSdk();
//					dialog.dismiss();
//				}
//			});
//        builder.setNegativeButton("拒绝", new DialogInterface.OnClickListener() {
//				@Override
//				public void onClick(DialogInterface dialog, int which) {
//					getSharedPreferences().edit()
//                        .putString(PRIVACY_VALUE, String.valueOf(0))
//                        .apply();
//					dialog.dismiss();
//				}
//			});
//        AlertDialog dialog = builder.create();
//
//        // 配置弹窗位置（底部全屏）
//        Window window = dialog.getWindow();
//        if (window != null) {
//            window.setGravity(Gravity.BOTTOM);
//            WindowManager m = getWindowManager();
//            Display d = m.getDefaultDisplay();
//            WindowManager.LayoutParams p = window.getAttributes();
//            p.width = d.getWidth();
//            window.setAttributes(p);
//        }
//        dialog.show();
//    }
//
//    /**
//     * 初始化米盟SDK（核心修复：传递ApplicationContext + 异常捕获）
//     */
//    private void initMimoSdk() {
//        // 1. 安全获取ApplicationContext，避免Activity Context失效
//        Context appContext = getApplicationContext();
//        if (appContext == null) {
//            Log.e(TAG, "initMimoSdk: ApplicationContext is null");
//            return;
//        }
//        // 2. 初始化SDK，捕获异常避免崩溃
//        try {
//            MimoSdk.init(appContext, new MimoCustomController() {
//					@Override
//					public boolean isCanUseLocation() {
//						return true;
//					}
//
//					@Override
//					public MimoLocation getMimoLocation() {
//						return null;
//					}
//
//					@Override
//					public boolean isCanUseWifiState() {
//						return true;
//					}
//
//					@Override
//					public boolean alist() {
//						return true;
//					}
//				}, new MimoSdk.InitCallback() {
//					@Override
//					public void success() {
//						Log.d(TAG, "MimoSdk init success");
//					}
//
//					@Override
//					public void fail(int code, String msg) {
//						Log.e(TAG, "MimoSdk init fail, code=" + code + ",msg=" + msg);
//					}
//				});
//            MimoSdk.setDebugOn(true);
//        } catch (Exception e) {
//            Log.e(TAG, "initMimoSdk: init failed", e);
//        }
//    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        return super.dispatchKeyEvent(event);
    }

    @Override
    public void setupToolbar() {
        super.setupToolbar();
        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        }
    }
//
//    /**
//     * 获取SharedPreferences实例（原逻辑保留，添加空指针校验）
//     */
//    public SharedPreferences getSharedPreferences() {
//        if (mSharedPreferences == null) {
//            // 修复：使用ApplicationContext获取SharedPreferences，避免Activity Context泄露
//            Context appContext = getApplicationContext();
//            if (appContext != null) {
//                mSharedPreferences = appContext.getSharedPreferences(PRIVACY_FILE, Context.MODE_PRIVATE);
//            } else {
//                Log.e(TAG, "getSharedPreferences: ApplicationContext is null");
//                // 降级方案：若ApplicationContext为空，使用Activity Context（仅作兼容）
//                mSharedPreferences = super.getSharedPreferences(PRIVACY_FILE, Context.MODE_PRIVATE);
//            }
//        }
//        return mSharedPreferences;
//    }
}

