package rowedto.jockeyedto.sheetedto.atticedto.calfedto.despiseedto.matrixedto

import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.pm.ApplicationInfo
import android.content.pm.PackageInfo
import android.graphics.Color
import android.net.Uri
import android.view.View
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.databinding.LyingedtoBinding
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import rowedto.jockeyedto.sheetedto.balsamedto.formaledto.orientationedto.Patedto.showExitFunctionDialog
import rowedto.jockeyedto.sheetedto.debutedto.revolutionaryedto.Toneedto
import rowedto.jockeyedto.sheetedto.knewedto.economicedto.copyrightedto.Crossingedto
import rowedto.jockeyedto.sheetedto.meadowedto.naturaledto.idealedto.Nominationedto
import rowedto.jockeyedto.sheetedto.raceedto.pavementedto.Nodeedto.ramPair
import rowedto.jockeyedto.sheetedto.raceedto.pavementedto.Spareedto
import rowedto.jockeyedto.sheetedto.strangeedto.pyramidedto.particlesedto.Scandaledto


class Cousinedto : Crossingedto<LyingedtoBinding>() {

    var uninstallTimes = 0
    override val binding: LyingedtoBinding by lazy {
        LyingedtoBinding.inflate(layoutInflater)
    }

    private lateinit var adapter: Nominationedto


    private var ePercent = 0

    @SuppressLint("SetTextI18n")
    override fun initView() {
        Spareedto.setStatusBarLightMode(this, true)
        Spareedto.setStatusBarColor(this, Color.TRANSPARENT)
        binding.root.updatePadding(top = Spareedto.getStatusBarHeight())
        Scandaledto.admobMaxShowNativeAd(this,binding.tooledto,1)
        val ramPair = ramPair()
        val percent = ((ramPair.first.toFloat() / ramPair.second.toFloat()) * 100).toInt()
        ePercent = percent

        adapter = Nominationedto(true) { pkg ->
            if (uninstallTimes % 3 == 0 && uninstallTimes > 0) {
                Scandaledto.admobMaxShowInterstitialAd(this,false) { unInstall(pkg) }
            } else {
                unInstall(pkg)
            }
        }
        binding.funeraledto.adapter = adapter

        initData()
    }

    private fun unInstall(pkg: String) {
        val intent = Intent(Intent.ACTION_DELETE, Uri.parse("package:${pkg}"))
        launcher.launch(intent) {
            if (!isInstalled(this, pkg)) {
                adapter.removeBean(pkg)
                uninstallTimes++
            }
        }
    }

    private fun isInstalled(context: Context, pkg: String, error: (() -> Unit)? = null): Boolean {
        return try {
            context.packageManager.getPackageInfo(pkg, 0)
            true
        } catch (e: Exception) {
            error?.invoke()
            false
        }
    }

    override fun initListener() {
        super.initListener()
        onBackPressedDispatcher.addCallback {
            showExitFunctionDialog{showAd ->
                if (showAd){
                    Scandaledto.admobMaxShowInterstitialAd(this@Cousinedto, isLoading = false) {
                        finishToMain()
                    }
                }else{
                    finishToMain()
                }

            }
        }
        binding.conditionedto.setOnClickListener {
            onBackPressedDispatcher.onBackPressed()
        }
    }

    @SuppressLint("QueryPermissionsNeeded")
    private fun initData() = lifecycleScope.launch(Dispatchers.IO) {
        val pm = packageManager
        val packages = pm.getInstalledPackages(0)
        val list = arrayListOf<Toneedto>()

        packages.forEach { app ->
            if (isLaunchApp(this@Cousinedto, app)) {

                val appBean = Toneedto(
                    app.applicationInfo.loadIcon(pm),
                    app.applicationInfo.loadLabel(pm).toString(),
                    app.applicationInfo.packageName
                )
                list.add(appBean)
            }
        }
        launch(Dispatchers.Main) {
            binding.toweredto.visibility = View.GONE
            adapter.setData(list)
        }
    }

    private fun isLaunchApp(context: Context, app: PackageInfo, filterSystem: Boolean = true): Boolean {

        val flagSystem = (app.applicationInfo.flags and ApplicationInfo.FLAG_SYSTEM) < 1
        val flag = if (filterSystem) flagSystem else true

        return flag && app.applicationInfo.packageName != context.packageName
    }

}