package com.zxhy.hfilemanagermaster.largefile

import android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.example.hfilemanagermaster.R
import com.example.hfilemanagermaster.databinding.ItemVideoSelectBinding
import com.zxhy.hfilemanagermaster.data.MediaDataC
import com.zxhy.hfilemanagermaster.glide.loadIntoImageView

class LargeVideoSelectorAdapter(
    private val selectAction: ((flag: Boolean) -> Unit)? = null
) : RecyclerView.Adapter<LargeVideoSelectorAdapter.VideoSelectorViewHolder>() {

    private val mediaList = arrayListOf<MediaDataC>()

    class VideoSelectorViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val binding = ItemVideoSelectBinding.bind(view)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VideoSelectorViewHolder {
        val root = R.layout.item_video_select.inflate(parent)
        return VideoSelectorViewHolder(root)
    }

    override fun getItemCount(): Int {
        return mediaList.size
    }

    override fun onBindViewHolder(holder: VideoSelectorViewHolder, position: Int) {
        val context = holder.binding.root.context
        val data = mediaList[position]
        holder.binding.apply {
            loadIntoImageView(context, data.uri, ivImage)
            ivSelector.isSelected = data.select
        }
    }

    override fun onBindViewHolder(
        holder: VideoSelectorViewHolder,
        position: Int,
        payloads: MutableList<Any>
    ) {
        val context = holder.binding.root.context
        val data = mediaList[position]

        //判断是做局部刷新还是单条刷新
        if (payloads.isEmpty()) {//局部刷新
            holder.binding.apply {
                loadIntoImageView(context, data.uri, ivImage)

                ivSelector.isSelected = data.select
                ivSelector.setOnClickListener {
                    data.select = !data.select
                    notifyItemChanged(position, "单条刷新")
                }
                if (data == mediaList.last()) {
                    selectAction?.invoke(mediaList.all { it.select })
                }
            }
        } else {// 单条刷新
            holder.binding.apply {
                ivSelector.isSelected = data.select
            }
            super.onBindViewHolder(holder, position, payloads)

            selectAction?.invoke(mediaList.all { it.select })
        }

    }

    /**
     * 解析xml布局
     *
     * @param parent 父布局
     * @param attachToRoot 是否依附到父布局
     */
    fun Int.inflate(parent: ViewGroup, attachToRoot: Boolean = false): View {
        return LayoutInflater.from(parent.context).inflate(this, parent, attachToRoot)
    }

    @SuppressLint("NotifyDataSetChanged")
    fun setData(data: List<MediaDataC>) {
        mediaList.clear()
        mediaList.addAll(data)
        notifyDataSetChanged()
    }

    @SuppressLint("NotifyDataSetChanged")
    fun setToggleSelect(): Boolean {
        val flag = mediaList.all { it.select }
        mediaList.forEach { it.select = !flag }
        notifyDataSetChanged()
        return !flag
    }

    fun getSelectSize(): Int {
        return mediaList.count { it.select }
    }
}