package com.example.doctor.Patients.Reports.Edit

import android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.example.doctor.R
import com.example.doctor.databinding.ItemEditSportNoBinding
import com.example.doctor.databinding.ItemEditSportYesBinding


class EditSportNoAdapter(val listener_sport: Listener) :
    ListAdapter<EditSportModel, EditSportNoAdapter.Holder>(
        Comparator()
    ) {//Productitem - по этой форме будем заполнять.//ProductAdapter.holder - это создаваемый holder который хранит логику как нужно заполнять карточку


    //В holder создаетс код с помошью которого мы будем заполнять и сохронять разметку
    class Holder(view: View, val listener_sport: Listener) :
        RecyclerView.ViewHolder(view) {//Класс который будет хранить сссылки на элементы, и отвечает за один элемент за 1 раз, то есть сначсало нулевой элемент заполнит, потом первый, потом второй и т.д.
        //Для передачи данных

        val binding = ItemEditSportNoBinding.bind(view)//view - здесь храянтся элементы и мы их bind заполним в ListItemBinding//ListItemBinding - это клласс даннйо разметки(карточки) которую мы будем заполнять, а нужна дання переменная(binding), чтобы мжно было при заполнение обращатся к элементам карточки

        var itemTemp: EditSportModel? =
            null//Глобальная переменная для нашего item, чтобы можно было передать данные для нажатия

        //init - дает возможность внутри адаптера обращаться к элементам экрана
        init {
            binding.btnYeyNo.setOnClickListener {//Нажатие на ячейку//itemView - это весь элемент карточки из списка
                itemTemp?.let { it1 -> listener_sport.onClickAppeals(it1) }
            }
        }

        @SuppressLint("SuspiciousIndentation")
        fun bind(item: EditSportModel) = with(binding) {//Productitem - перпедаем данные
            itemTemp = item
            txtNumber.text = item.number.toString()+"."
            txtNameSport.text = item.name
            txtDescriptionSport.text = item.description

            if (item.expand) {
                binding.txtDescriptionSport.maxLines = 100

            } else {
                binding.txtDescriptionSport.maxLines = 1

            }

            binding.CardViewOld.setOnClickListener {
                if (item.expand == false) {
                    binding.txtDescriptionSport.maxLines = 100
                    item.expand = true
                } else {
                    binding.txtDescriptionSport.maxLines = 1
                    item.expand = false
                }
            }

        }


    }


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_edit_sport_no, parent, false)//Создаем(надуваем) list_item
        return Holder(view, listener_sport)//Через Holder возврощаем view
    }

    override fun onBindViewHolder(holder: Holder, position: Int) {
        val view = holder.bind(getItem(position))//Заполняем по позиции карточку
    }


    //Comparator - сравнивает старый список и новый и если что-то изменилось, то работает с конкретным изменением списке, а не весь список переписывает
    class Comparator : DiffUtil.ItemCallback<EditSportModel>() {
        override fun areItemsTheSame(
            oldItem: EditSportModel,
            newItem: EditSportModel
        ): Boolean {//Тут лучше всего сравнивать по id//oldItem - элементы старого списка, newItem - элементы нового списка//Возврощает Boolean, тоесть есть изменения или нет
            return oldItem.id == newItem.id//Сравниваем полностью весь список новы и старый, по очередно по одной карточке и по элементно, то есть нулевой элемент, первый, второй и т.д.. Но лучше сравнивать по id списки, а не просто весь список, так как это эфективнее, так как id уникальный(oldItem.id == newItem.id)
        }

        override fun areContentsTheSame(
            oldItem: EditSportModel,
            newItem: EditSportModel
        ): Boolean {//Утут нужно сравнивать весь спсок старых элементов и новых
            return oldItem == newItem//Сравниваем полностью весь список новы и старый
        }
    }

    //Интерфейс нажатия на кнопку удалить товар из корзины
    interface Listener {
        fun onClickAppeals(item: EditSportModel)
    }


}




