package com.example.doctor.Patients.Reports.Courses

import android.annotation.SuppressLint
import android.graphics.Color
import android.util.Log
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.Setting.Courses.Model.CoursesDoctorModel
import com.example.doctor.databinding.ItemCardCoursesDoctorBinding


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


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

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

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

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

            }
        }

        @SuppressLint("SuspiciousIndentation", "SetTextI18n")
        fun bind(item: SportCoursModel) = with(binding) {//Productitem - перпедаем данные
            itemTemp = item
            txtNumberCurds.text = item.number.toString() + "."
            txtNameCoursesDoctor.text = item.name
            if (item.visibility == 100000) {
                CVCours.setCardBackgroundColor(Color.parseColor("#83da83"))
                Log.i("11111111111","sasdasdasdasdasadsdasda")
            } else {
                CVCours.setCardBackgroundColor(Color.parseColor("#b6b6b6"))
                Log.i("2222222222222","sasdasdasdasdasadsdasda")
            }
        }


    }


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

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


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

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

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


}




