package com.covalima.rekomendasaunaihan.ui.rekomendasi import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager import com.covalima.rekomendasaunaihan.databinding.FragmentRekomendasiBinding import com.covalima.rekomendasaunaihan.model.ApiResponse import com.covalima.rekomendasaunaihan.model.Rekomendasi import com.covalima.rekomendasaunaihan.network.ApiClient import com.covalima.rekomendasaunaihan.util.DeviceUtil import retrofit2.Call import retrofit2.Callback import retrofit2.Response class RekomendasiFragment : Fragment() { private var _binding: FragmentRekomendasiBinding? = null private val binding get() = _binding!! private lateinit var adapter: RekomendasiAdapter override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentRekomendasiBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) adapter = RekomendasiAdapter(emptyList()) binding.rvRekomendasi.layoutManager = LinearLayoutManager(requireContext()) binding.rvRekomendasi.adapter = adapter binding.btnHiliPreferensia.setOnClickListener { startActivity(Intent(requireContext(), com.covalima.rekomendasaunaihan.ui.rekomendasi.PreferensiaActivity::class.java)) } binding.swipeRefresh.setOnRefreshListener { cariAihanAcuan() } cariAihanAcuan() } // Langkah 1: hetan aihan ne'ebe user fo bintang aas liu, hanesan "acuan" ba CBF private fun cariAihanAcuan() { binding.progressBar.visibility = View.VISIBLE val deviceId = DeviceUtil.getDeviceId(requireContext()) ApiClient.apiService.getUserRatings(deviceId).enqueue(object : Callback>>> { override fun onResponse( call: Call>>>, response: Response>>> ) { val ratings = response.body()?.data if (ratings.isNullOrEmpty()) { binding.progressBar.visibility = View.GONE binding.swipeRefresh.isRefreshing = false Toast.makeText( requireContext(), "Fo fitun uluk ba aihan ida, para hetan rekomendasaun personĂ¡l", Toast.LENGTH_LONG ).show() return } // Hili aihan ho bintang aas liu hanesan acuan val acuan = ratings.maxByOrNull { it["valor_bintang"] ?: 0 } val idAcuan = acuan?.get("id_aihan") ?: return loadRekomendasi(idAcuan) } override fun onFailure(call: Call>>>, t: Throwable) { binding.progressBar.visibility = View.GONE binding.swipeRefresh.isRefreshing = false Toast.makeText(requireContext(), "Konesaun falha: ${t.message}", Toast.LENGTH_SHORT).show() } }) } // Langkah 2: hetan lista rekomendasaun (Content-Based Filtering) husi id_aihan acuan private fun loadRekomendasi(idAihanAcuan: Int) { ApiClient.apiService.getRekomendasi(idAihanAcuan).enqueue(object : Callback>> { override fun onResponse( call: Call>>, response: Response>> ) { binding.progressBar.visibility = View.GONE binding.swipeRefresh.isRefreshing = false val body = response.body() if (body?.status == "success" && body.data != null) { adapter.updateData(body.data) } else { Toast.makeText(requireContext(), "Rekomendasaun la hetan", Toast.LENGTH_SHORT).show() } } override fun onFailure(call: Call>>, t: Throwable) { binding.progressBar.visibility = View.GONE binding.swipeRefresh.isRefreshing = false Toast.makeText(requireContext(), "Konesaun falha: ${t.message}", Toast.LENGTH_SHORT).show() } }) } override fun onDestroyView() { super.onDestroyView() _binding = null } }