package importantedto.maidedto.witnessedto.nationalismedto

import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.app.AlertDialog
import android.view.LayoutInflater
import android.view.View
import android.view.animation.LinearInterpolator
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.R
import com.base.datarecovery.databinding.ReportedtoBinding
import importantedto.admireedto.sweptedto.Differenceedto
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch

class Salvationedto(
    val activity: AppCompatActivity,
) {
    private val TAG = "FileScanDialog"
    private val a1 = ValueAnimator.ofFloat(0f, -360f)
    private val dialog = AlertDialog.Builder(activity).create()
    private val binding = ReportedtoBinding.inflate(LayoutInflater.from(activity))

    @SuppressLint("SetTextI18n")
    fun showFileScanDialog(
        pathFlow: SharedFlow<String>,
        foundFlow: SharedFlow<Pair<Int, String>>,
        foundAction: ((path: String) -> Unit)? = null
    ): AlertDialog {
        dialog?.setView(binding.root)
        dialog?.setCanceledOnTouchOutside(false)
        dialog?.setCancelable(false)
        dialog?.show()

        dialog?.window?.setBackgroundDrawableResource(android.R.color.transparent)
        val params = dialog?.window?.attributes
        params?.width = activity.resources.getDimensionPixelOffset(R.dimen.weekedto)
        dialog?.window?.attributes = params

        a1.run {
            duration = 1000
            repeatMode = ValueAnimator.RESTART
            repeatCount = ValueAnimator.INFINITE
            interpolator = LinearInterpolator()
            addUpdateListener {
                binding.deficitedto.rotation = it.animatedValue as Float
            }
            start()
        }

        dialog?.setOnDismissListener {
            a1.cancel()
        }

        Differenceedto.admobMaxShowNativeAd(activity, binding.agileedto, 1)

        var pathShowed = false
        activity.lifecycleScope.launch(Dispatchers.Main) {
            pathFlow.collectLatest { path ->
                if (!pathShowed) {
                    pathShowed = true
                    binding.battlefieldedto.visibility = View.VISIBLE
                }
                binding.battlefieldedto.text = path
            }
        }
        activity.lifecycleScope.launch {
            foundFlow.collectLatest {
                binding.requirementedto.text = "Found ${it.first} files"
                foundAction?.invoke(it.second)
            }
        }

        return dialog
    }

    @SuppressLint("SetTextI18n")
    fun finishScan(clickAction: () -> Unit) {
        a1.cancel()
        binding.trolleyedto.visibility = View.VISIBLE
        binding.deficitedto.visibility = View.GONE
        binding.battlefieldedto.visibility = View.GONE
        binding.assaultedto.text = "Scan Completed"
        binding.trolleyedto.setOnClickListener {
            clickAction.invoke()
        }
    }
}