package com.zxhy.hfilemanagermaster.emptyfile

import android.Manifest
import android.app.Dialog
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.view.View
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.ActivityEmptyFileBinding
import com.zxhy.hfilemanagermaster.data.MediaDataC
import com.zxhy.hfilemanagermaster.dialog.showLoadingDialog
import com.zxhy.hfilemanagermaster.dialog.showOperationDialog
import com.zxhy.hfilemanagermaster.knife.deleteDirectory
import com.zxhy.hfilemanagermaster.knife.emptyFile
import com.zxhy.hfilemanagermaster.knife.toast
import com.zxhy.hfilemanagermaster.permission.IntentLauncher
import com.zxhy.hfilemanagermaster.permission.PermissionLauncher
import com.zxhy.hfilemanagermaster.permission.alert
import com.zxhy.hfilemanagermaster.permission.requestStoreFollow
import com.zxhy.hfilemanagermaster.permission.storePermissionCheck
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.io.File

class EmptyFileActivity : AppCompatActivity() {

    private lateinit var binding: ActivityEmptyFileBinding
    private lateinit var intentLauncher: IntentLauncher
    private lateinit var permissionLauncher: PermissionLauncher
    private lateinit var emptyFileAdapter: EmptyFileAdapter
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        intentLauncher = IntentLauncher(this)
        permissionLauncher = PermissionLauncher(this)
        binding = ActivityEmptyFileBinding.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()
        }

        if (storePermissionCheck()) {
            fileMode()
        } else {
            lockMode()
        }
    }

    private fun loadEmptyFile() {
        val loadDialog = showLoadingDialog()
        emptyFile(
            this,
            onDoAction = { list ->
                runOnUiThread {
                    loadDialog.dismiss()
                    emptyFileAdapter.addData(list)
                }
            })
    }


    private fun lockMode() {
        binding.clLock.visibility = View.VISIBLE
        binding.clShow.visibility = View.GONE

        binding.tvSet.setOnClickListener {
            this.requestStoreFollow(
                permissionLauncher,
                intentLauncher,
                disAgreeAction = {
                    lockMode()
                },
                agreeAction = {
                    fileMode()
                })
        }

    }

    private fun fileMode() {
        binding.clLock.visibility = View.GONE
        binding.clShow.visibility = View.VISIBLE

        emptyFileAdapter = EmptyFileAdapter {
            binding.ivAll.isSelected = it
        }
        binding.rv.adapter = emptyFileAdapter
        binding.ivAll.setOnClickListener {
            it.isSelected = emptyFileAdapter.setToggleSelect()
        }
        binding.tvDelete.setOnClickListener {
            val list = emptyFileAdapter.getSelectFile()
            if (list.isEmpty()) return@setOnClickListener
            this.alert(
                "Currently selected ${list.size} items, are you sure to delete them",
                "Delete Confirm"
            ) {
                positiveButton("confirm") { dialog ->
                    deleteFiles(list)
                    dialog.dismiss()
                }
                negativeButton("cancel") { dialog ->
                    dialog.dismiss()
                }
                //禁止取消
                isCancel(false)
            }
        }

        loadEmptyFile()
    }

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


}