package com.covalima.rekomendasaunaihan.ui.rekomendasi import android.os.Bundle import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import com.covalima.rekomendasaunaihan.databinding.ActivityRekomendasaunHasilBinding import com.covalima.rekomendasaunaihan.model.ApiResponse import com.covalima.rekomendasaunaihan.model.PreferensiaRequest 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 /** * "Form" foun ne'ebé hatudu rezultadu kompletu husi algoritmu * Content-Based Filtering (Cosine Similarity berbobot), hanesan iha * Kapítulu 3.9-3.12 iha proposta (Rezultadu Rekomendasaun ba Utilizadór). * * Modu dahuluk (default): "acuan" = ai-han ne'ebé utilizadór hili/haree * (extra "id_aihan" + "naran_aihan"). * Modu rua: "preferensia" = utilizadór hili preferénsia nia rasik liu * husi [PreferensiaActivity] (extra "modu"="preferensia" + pref_*). */ class RekomendasaunHasilActivity : AppCompatActivity() { private lateinit var binding: ActivityRekomendasaunHasilBinding private lateinit var adapter: RekomendasaunHasilAdapter private var idAihan: Int = -1 private var moduPreferensia: Boolean = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityRekomendasaunHasilBinding.inflate(layoutInflater) setContentView(binding.root) setSupportActionBar(binding.toolbar) supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.title = "Rezultadu Rekomendasaun" binding.toolbar.setNavigationOnClickListener { finish() } moduPreferensia = intent.getStringExtra("modu") == "preferensia" adapter = RekomendasaunHasilAdapter(emptyList()) binding.rvHasil.layoutManager = LinearLayoutManager(this) binding.rvHasil.adapter = adapter if (moduPreferensia) { binding.tvNaranAcuan.text = "Preferénsia Ita Nian" loadRezultaduPreferensia() } else { idAihan = intent.getIntExtra("id_aihan", -1) val naranAihan = intent.getStringExtra("naran_aihan") ?: "-" binding.tvNaranAcuan.text = naranAihan if (idAihan == -1) { Toast.makeText(this, "Aihan la valid", Toast.LENGTH_SHORT).show() finish() return } loadRezultaduAihan() } } private fun loadRezultaduAihan() { binding.progressBar.visibility = View.VISIBLE binding.tvEmpty.visibility = View.GONE ApiClient.apiService.getRekomendasi(idAihan).enqueue(object : Callback>> { override fun onResponse( call: Call>>, response: Response>> ) { binding.progressBar.visibility = View.GONE tampilkanRezultadu(response.body()?.data) } override fun onFailure(call: Call>>, t: Throwable) { binding.progressBar.visibility = View.GONE binding.tvEmpty.visibility = View.VISIBLE Toast.makeText(this@RekomendasaunHasilActivity, "Konesaun falha: ${t.message}", Toast.LENGTH_SHORT).show() } }) } private fun loadRezultaduPreferensia() { binding.progressBar.visibility = View.VISIBLE binding.tvEmpty.visibility = View.GONE val request = PreferensiaRequest( ikan = intent.getIntExtra("pref_ikan", 0), nan = intent.getIntExtra("pref_nan", 0), modo = intent.getIntExtra("pref_modo", 0), dosi = intent.getIntExtra("pref_dosi", 0), manas = intent.getIntExtra("pref_manas", 0), midar = intent.getIntExtra("pref_midar", 0), moruk = intent.getIntExtra("pref_moruk", 0), sin = intent.getIntExtra("pref_sin", 0), mamar = intent.getIntExtra("pref_mamar", 0), tos = intent.getIntExtra("pref_tos", 0), idDevice = DeviceUtil.getDeviceId(this) ) ApiClient.apiService.getRekomendasiPreferensia(request).enqueue(object : Callback>> { override fun onResponse( call: Call>>, response: Response>> ) { binding.progressBar.visibility = View.GONE tampilkanRezultadu(response.body()?.data) } override fun onFailure(call: Call>>, t: Throwable) { binding.progressBar.visibility = View.GONE binding.tvEmpty.visibility = View.VISIBLE Toast.makeText(this@RekomendasaunHasilActivity, "Konesaun falha: ${t.message}", Toast.LENGTH_SHORT).show() } }) } private fun tampilkanRezultadu(data: List?) { if (data.isNullOrEmpty()) { binding.tvEmpty.visibility = View.VISIBLE } else { adapter.updateData(data) } } }