package com.swiftcleaner.chovey.view.activity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.animation.ValueAnimator;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.CountDownTimer;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.databinding.ActivityInfoBinding;
import com.swiftcleaner.chovey.model.util.BatteryReceiver;
import com.swiftcleaner.chovey.model.util.FinishMain;
import com.swiftcleaner.chovey.view.BaseActivity;
import com.swiftcleaner.chovey.view.BaseActivityKotlin;
import com.swiftcleaner.chovey.view.MainActivity;
import com.swiftcleaner.chovey.view.dialog.CustomScoreDialog;
import com.swiftcleaner.chovey.view.dialog.LoadingDialog;

public class InfoActivity extends BaseActivity<ActivityInfoBinding> {
    private BatteryReceiver batteryReceiver;
    private static final int REQUEST_ALL_FILES_ACCESS_PERMISSION = 100;
    private static final int REQUEST_PERMISSION_CODE = 101;

    @Override
    protected ActivityInfoBinding getViewBinding() {
        return ActivityInfoBinding.inflate(getLayoutInflater());
    }

    @Override
    protected void initView() {
        initBar();
    }

    @Override
    protected void initData() {
        EventUtils.INSTANCE.event("page_InfoActivity", "", null);
        checkAndRequestPermissions();
        initShow();
        registerReceiver();
    }

    @Override
    protected void onResume() {
        super.onResume();
        AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
    }

    private void checkAndRequestPermissions() {
        if (!checkFilesAccessPermission(this)) {
            // 没有权限，请求权限
            requestFilesAccessPermission();
        }
    }

    private boolean checkFilesAccessPermission(Context context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            return Environment.isExternalStorageManager();
        } else {
            int readPermission = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE);
            int writePermission = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
            return readPermission == PackageManager.PERMISSION_GRANTED && writePermission == PackageManager.PERMISSION_GRANTED;
        }
    }

    private void requestFilesAccessPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            try {
                Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                intent.addCategory("android.intent.category.DEFAULT");
                intent.setData(Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, REQUEST_ALL_FILES_ACCESS_PERMISSION);
            } catch (ActivityNotFoundException e) {
                Toast.makeText(this, "Unable to request permission, please grant manually", Toast.LENGTH_SHORT).show();
            }
        } else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_CODE);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_ALL_FILES_ACCESS_PERMISSION || requestCode == REQUEST_PERMISSION_CODE) {
            if (!checkFilesAccessPermission(this)) {
                // 权限未授予，直接关闭页面
                Toast.makeText(this, "Unauthorized permission, the page is about to close", Toast.LENGTH_SHORT).show();
                finish();
            }
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_ALL_FILES_ACCESS_PERMISSION) {
            // 检查权限是否已经授予
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                if (Environment.isExternalStorageManager()) {
                    // 权限已授予，刷新页面或执行相关操作
                    Intent intent = new Intent(this, MainActivity.class);
                    startActivity(intent);
                    finish();
                } else {
                    // 权限未授予，提示用户
                    Toast.makeText(this, "Permission not granted, please grant manually", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }
    private void initBar() {
        ImmersionBar.with(this).transparentStatusBar()
                .statusBarDarkFont(false)
                .navigationBarDarkIcon(true)
                .init();
    }

    private void initShow() {
        binding.ivReturn.setOnClickListener(v -> initCustDialog());
        binding.infoButtonOk.setOnClickListener(v -> initCustDialog());
    }

    private void registerReceiver() {
        batteryReceiver = new BatteryReceiver(() -> setBatteryInfo());
        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryReceiver, intentFilter);
    }

    private void setBatteryInfo() {
        binding.temperatureNum.setText(String.format("%.1f ℃", batteryReceiver.temperature / 10.0));
        binding.voltageNum.setText(String.format("%.1f V", batteryReceiver.voltage / 1000.0));
        binding.technologyNum.setText(batteryReceiver.technology);
        binding.batteryCapacityNum.setText(String.format("%d mAh", (int) batteryReceiver.mAh));
        binding.electricNum.setText(String.format("%.2f mA", batteryReceiver.current / 1000.0));
        binding.currentNum.setText(String.format("%.2f mA", batteryReceiver.currentAverage / 1000.0));
        binding.infoHour.setText(String.valueOf(batteryReceiver.hours));
        binding.infoMinute.setText(String.valueOf(batteryReceiver.minutes));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (batteryReceiver!= null) {
            unregisterReceiver(batteryReceiver);
        }
    }

    @Override
    public void onBackPressed() {
        initCustDialog();
    }

    private void initCustDialog() {
        Activity activity = this;
        CustomScoreDialog customScoreDialog = new CustomScoreDialog(this);
        customScoreDialog.setOnDialogClickListener(new CustomScoreDialog.OnDialogClickListener() {
            @Override
            public void onCancel() {
                customScoreDialog.dismiss();
            }

            @Override
            public void onSubmit() {
                if (AdmobHelps.INSTANCE.isShowAdBackInter()){
                    AdmobHelps.INSTANCE.showInterstitialAd(
                            InfoActivity.this,
                            () -> {
                                FinishMain.INSTANCE.finishToMain(activity);
                                // 当广告被关闭时的逻辑
                                Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
                                return null;
                            },
                            () -> {
                                // 当广告展示完成时的逻辑
                                Log.d("AdmobHelps", "Interstitial Ad was shown.");
                                return null;
                            },
                            () -> {
                                FinishMain.INSTANCE.finishToMain(activity);
                                // 当广告加载失败时的逻辑
                                Log.d("AdmobHelps", "Interstitial Ad failed to load.");
                                return null;
                            },
                            false
                    );
                }else {
                    FinishMain.INSTANCE.finishToMain(activity);
                }
            }
        });
        customScoreDialog.show();
    }
}