package com.example.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.GridLayout
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.myapplication.databinding.ActivityRecyclerviewBinding

class RecyclerviewActivity : AppCompatActivity() {
    private lateinit var binding: ActivityRecyclerviewBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityRecyclerviewBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val carList = ArrayList<Car>()
        for (i in 0 until 30) {
            carList.add(Car("" + i + "번째 자동차", "" + i + "순위 엔진"))
        }

        val adapter = RecyclerViewAdapter(carList, LayoutInflater.from(this@RecyclerviewActivity))
        binding.recyclerView.adapter = adapter
        //   binding.recyclerView.layoutManager = LinearLayoutManager(this@RecyclerviewActivity)
        binding.recyclerView.layoutManager = GridLayoutManager(this@RecyclerviewActivity, 2)
    }
}

class RecyclerViewAdapter(val itemList: ArrayList<Car>, val inflater: LayoutInflater) :
    //상속받는 함수의 타입은 이너클래스에서 만든 viewholder을 넣어준다.
    RecyclerView.Adapter<RecyclerViewAdapter.ViewHodler>() {

    //RecyclerViewAdapter의 매게변수 itemlist를 쓰기 위해서 inner클래스 임을 명시해준다.
    //그렇지 않으면, outer 클래스의 매개변수를 사용할 수 없음.
    //2. findViewById로 textview를 찾아서 viewholder에 저장한다.
    inner class ViewHodler(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val carName: TextView
        val carEngine: TextView

        init {
            carName = itemView.findViewById(R.id.car_name)
            carEngine = itemView.findViewById(R.id.car_engine)
            //ViewHolder클래스에 itemview가 매게변수로 들어오기 때문에, 여기서 setonclickListender를 달아준다.
            itemView.setOnClickListener {
                //뷰의 포지션은 bindingAdapterPosition 변수로 가져온다.
                val position: Int = bindingAdapterPosition
                val engineName = itemList.get(position).engine
                Log.d("engine", engineName)
            }
        }
    }

    //1. item_view layout을 객체화시켜준다.
    // ViewHolder class의 매개변수로 넣어준다.
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHodler {
        val view = inflater.inflate(R.layout.item_view, parent, false)
        return ViewHodler(view)
    }

    //3. list[position]의 내용물을 저장된 textview(holder.view)에 넣어준다.
    override fun onBindViewHolder(holder: ViewHodler, position: Int) {
        holder.carName.setText(itemList.get(position).name)
        holder.carEngine.setText(itemList.get(position).engine)

    }

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