package com.covalima.rekomendasaunaihan.ui.detail import android.content.Intent import android.os.Bundle import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import com.bumptech.glide.Glide import com.covalima.rekomendasaunaihan.databinding.ActivityDetailAihanBinding import com.covalima.rekomendasaunaihan.model.* import com.covalima.rekomendasaunaihan.network.ApiClient import com.covalima.rekomendasaunaihan.ui.rekomendasi.RekomendasaunHasilActivity import com.covalima.rekomendasaunaihan.ui.rekomendasi.RekomendasiAdapter import com.covalima.rekomendasaunaihan.util.DeviceUtil import retrofit2.Call import retrofit2.Callback import retrofit2.Response class DetailAihanActivity : AppCompatActivity() { private lateinit var binding: ActivityDetailAihanBinding private var idAihan: Int = -1 private var naranAihanAtual: String = "-" private lateinit var deviceId: String private lateinit var similarAdapter: RekomendasiAdapter // Flag para hasoru rating listener dispara automatikamente // wainhira balun kedas balun sistema hakerek valor husi server private var isLoadingInitialRating = false private var uzaFotoResep = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityDetailAihanBinding.inflate(layoutInflater) setContentView(binding.root) idAihan = intent.getIntExtra("id_aihan", -1) uzaFotoResep = intent.getBooleanExtra("uza_foto_resep", false) deviceId = DeviceUtil.getDeviceId(this) if (idAihan == -1) { Toast.makeText(this, "Aihan la valid", Toast.LENGTH_SHORT).show() finish() return } similarAdapter = RekomendasiAdapter(emptyList()) binding.rvSimilar.layoutManager = LinearLayoutManager(this) binding.rvSimilar.adapter = similarAdapter loadDetail() loadRekomendasi() setupRatingListener() setupFavoritoButton() binding.btnHareeRekomendasaun.setOnClickListener { val intent = Intent(this, RekomendasaunHasilActivity::class.java) intent.putExtra("id_aihan", idAihan) intent.putExtra("naran_aihan", naranAihanAtual) startActivity(intent) } } private fun loadDetail() { ApiClient.apiService.getDetailAihan(idAihan).enqueue(object : Callback> { override fun onResponse(call: Call>, response: Response>) { val aihan = response.body()?.data ?: return tampilkanDetail(aihan) } override fun onFailure(call: Call>, t: Throwable) { Toast.makeText(this@DetailAihanActivity, "Konesaun falha: ${t.message}", Toast.LENGTH_SHORT).show() } }) } private fun tampilkanDetail(aihan: Aihan) { naranAihanAtual = aihan.naranAihan binding.tvNaranAihan.text = "Naran Aihan: ${aihan.naranAihan}" binding.tvKategoria.text = "Kategoria: ${aihan.naranKategoria ?: "-"}" binding.tvIngredientes.text = "Ingredientes Prinsipal: ${aihan.naranIngredientes ?: "-"}" binding.tvSabor.text = "Sabor: ${aihan.sabor}" binding.tvTextura.text = "Textura: ${aihan.textura}" binding.tvTeknika.text = "Teknika Te'in: ${aihan.naranKategoria ?: "-"}" binding.tvDeskripsaun.text = aihan.deskripsaun ?: "-" binding.tvRatingInfo.text = "Rata-rata: ${aihan.rataBintang} husi ${aihan.jumlahRating} rating" isLoadingInitialRating = true binding.ratingBar.rating = aihan.rataBintang.toFloat() isLoadingInitialRating = false // Se liu husi "click ingredientes", hatudu FOTO RESEP (la'os foto matang normal) val naranFotoAtual = if (uzaFotoResep && !aihan.fotoResep.isNullOrEmpty()) aihan.fotoResep else aihan.foto Glide.with(this) .load(ApiClient.getFotoUrl(naranFotoAtual)) .into(binding.imgFoto) } private fun setupRatingListener() { binding.ratingBar.setOnRatingBarChangeListener { _, rating, fromUser -> if (!fromUser || isLoadingInitialRating) return@setOnRatingBarChangeListener val valor = rating.toInt().coerceIn(1, 5) val body = RatingRequest(idAihan, deviceId, valor) ApiClient.apiService.kirimRating(body).enqueue(object : Callback> { override fun onResponse(call: Call>, response: Response>) { Toast.makeText(this@DetailAihanActivity, "Obrigadu ba fitun $valor!", Toast.LENGTH_SHORT).show() loadDetail() // refresca rata-rata bintang } override fun onFailure(call: Call>, t: Throwable) { Toast.makeText(this@DetailAihanActivity, "La konsege rai bintang: ${t.message}", Toast.LENGTH_SHORT).show() } }) } } private fun setupFavoritoButton() { binding.btnFavorito.setOnClickListener { Toast.makeText(this, "Aihan hatama ona ba lista Favorito", Toast.LENGTH_SHORT).show() // TODO: liga ba endpoint favorito.php se rasik hakarak simpan permanente } } private fun loadRekomendasi() { ApiClient.apiService.getRekomendasi(idAihan).enqueue(object : Callback>> { override fun onResponse( call: Call>>, response: Response>> ) { val data = response.body()?.data ?: return similarAdapter.updateData(data.take(3)) } override fun onFailure(call: Call>>, t: Throwable) { // Ignora, la kritiku ba UX detalha } }) } }