package com.zxhy.hfilemanagermaster.duplicate

import android.app.AlertDialog
import android.app.Dialog
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.lifecycleScope
import com.example.hfilemanagermaster.R
import com.example.hfilemanagermaster.databinding.ActivityDupPictureBinding
import com.zxhy.hfilemanagermaster.data.DupImageData
import com.zxhy.hfilemanagermaster.dialog.showOperationDialog
import com.zxhy.hfilemanagermaster.knife.deleteDirectory
import com.zxhy.hfilemanagermaster.knife.dupImage
import com.zxhy.hfilemanagermaster.knife.getDupImageList
import com.zxhy.hfilemanagermaster.knife.toast
import com.zxhy.hfilemanagermaster.permission.alert
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.io.File

class DupPictureActivity : AppCompatActivity() {
    private lateinit var binding: ActivityDupPictureBinding
    private lateinit var adapter: DupImageAdapter
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        binding = ActivityDupPictureBinding.inflate(layoutInflater)
        setContentView(binding.root)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
        window.statusBarColor = ContextCompat.getColor(this, R.color.color_C2F300)
        binding.ivArrow.setOnClickListener {
            finish()
        }
        adapter = DupImageAdapter {
            binding.ivAll.isSelected = it
        }
        binding.rv.adapter = adapter
        binding.ivAll.setOnClickListener {
            it.isSelected = adapter.setToggleSelect()
        }
        binding.tvDelete.setOnClickListener {
            val num = adapter.getSelectNum()
            if (num == 0) return@setOnClickListener
            this.alert(
                "Currently selected $num items, are you sure to delete them",
                "Delete Confirm"
            ) {
                positiveButton("sure") { dialog ->
                    val data = adapter.getSelectData().map { File(it.path) }
                    deleteFiles(data)
                    dialog.dismiss()
                }
                negativeButton("cancel") { dialog ->
                    dialog.dismiss()
                }
                //禁止取消
                isCancel(false)
            }
        }


        loadData()
    }

    private fun deleteFiles(files: List<File>) = Thread {
        try {
            files.forEach {
                if (it.exists()) {
                    if (it.isFile) it.delete() else deleteDirectory(it)
                }
            }
            runOnUiThread {
                lifecycleScope.launch(Dispatchers.Main) {
                    val dialog = showOperationDialog(R.mipmap.dads_889562, "delete success!") {}
                    delay(200)
                    dialog.dismiss()
                }
            }
            loadData()
        } catch (e: Exception) {
            e.printStackTrace()
            runOnUiThread {
                toast("delete failed")
            }
        }
    }.start()

    private fun loadData() {
        lifecycleScope.launch(Dispatchers.IO) {
            val list = dupImage()
            val dupDataList = arrayListOf<DupImageData>()
            val dupList = getDupImageList(list)
            dupList.forEach {
                dupDataList.add(DupImageData(dupList = it))
            }
            lifecycleScope.launch(Dispatchers.Main) {
                adapter.setData(dupDataList)
            }
        }
    }
}