package com.covalima.rekomendasaunaihan.ui.home import android.content.Intent import android.os.Bundle import android.text.Editable import android.text.TextWatcher import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.recyclerview.widget.GridLayoutManager import com.covalima.rekomendasaunaihan.R import com.covalima.rekomendasaunaihan.databinding.FragmentHomeBinding import com.covalima.rekomendasaunaihan.model.Aihan import com.covalima.rekomendasaunaihan.model.ApiResponse import com.covalima.rekomendasaunaihan.model.Kategoria import com.covalima.rekomendasaunaihan.network.ApiClient import com.covalima.rekomendasaunaihan.ui.detail.DetailAihanActivity import retrofit2.Call import retrofit2.Callback import retrofit2.Response class HomeFragment : Fragment() { private var _binding: FragmentHomeBinding? = null private val binding get() = _binding!! private lateinit var rekomendasaunAdapter: GridAihanAdapter private var listAihanKompletu: List = emptyList() private var kategoriaTerpilih: String? = null // null = "Hotu-hotu" override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentHomeBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val onClick: (Aihan) -> Unit = { aihan -> val intent = Intent(requireContext(), DetailAihanActivity::class.java) intent.putExtra("id_aihan", aihan.idAihan) startActivity(intent) } rekomendasaunAdapter = GridAihanAdapter(emptyList(), onClick) binding.rvRekomendasaun.layoutManager = GridLayoutManager(requireContext(), 2) binding.rvRekomendasaun.adapter = rekomendasaunAdapter setupSearch() loadKategoria() loadAihan() } private fun setupSearch() { binding.etSearch.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { aplikaFiltru() } override fun afterTextChanged(s: Editable?) {} }) } private fun loadKategoria() { ApiClient.apiService.getListKategoria().enqueue(object : Callback>> { override fun onResponse( call: Call>>, response: Response>> ) { val data = response.body()?.data ?: return bangunChipKategoria(data) } override fun onFailure(call: Call>>, t: Throwable) { // ignora, chip la kritiku ba UX } }) } private fun bangunChipKategoria(listKategoria: List) { val container = binding.layoutKategoriaChips container.removeAllViews() val naranHotu = listOf("Hotu-hotu") + listKategoria.map { it.naranKategoria } naranHotu.forEachIndexed { index, naran -> val chip = TextView(requireContext()).apply { text = naran textSize = 13f setPadding(36, 18, 36, 18) isSelected = index == 0 setTextColor( if (isSelected) ContextCompat.getColor(requireContext(), R.color.white) else ContextCompat.getColor(requireContext(), R.color.text_primary) ) background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_chip_kategoria) val params = ViewGroup.MarginLayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT ) params.marginEnd = 20 layoutParams = params setOnClickListener { for (i in 0 until container.childCount) { val child = container.getChildAt(i) as TextView child.isSelected = false child.setTextColor(ContextCompat.getColor(requireContext(), R.color.text_primary)) } isSelected = true setTextColor(ContextCompat.getColor(requireContext(), R.color.white)) kategoriaTerpilih = if (naran == "Hotu-hotu") null else naran aplikaFiltru() } } container.addView(chip) } } private fun loadAihan() { ApiClient.apiService.getListAihan().enqueue(object : Callback>> { override fun onResponse( call: Call>>, response: Response>> ) { val data = response.body()?.data ?: return listAihanKompletu = data aplikaFiltru() } override fun onFailure(call: Call>>, t: Throwable) { // ignora iha baranda, la kritiku } }) } private fun aplikaFiltru() { val keyword = binding.etSearch.text.toString().trim().lowercase() var filtrado = listAihanKompletu if (kategoriaTerpilih != null) { filtrado = filtrado.filter { it.naranKategoria == kategoriaTerpilih } } if (keyword.isNotEmpty()) { filtrado = filtrado.filter { it.naranAihan.lowercase().contains(keyword) } } binding.tvEmptySearch.visibility = if (filtrado.isEmpty()) View.VISIBLE else View.GONE // Rekomendasaun: hatudu hotu-hotu ai-han ne'ebe hetan husi filtru, ordena husi rating aas ba kiik rekomendasaunAdapter.updateData(filtrado.sortedByDescending { it.rataBintang }) } override fun onDestroyView() { super.onDestroyView() _binding = null } }