package com.notifyhub.viewer.ui import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.notifyhub.viewer.NotizViewerApp import com.notifyhub.viewer.R import com.notifyhub.viewer.data.remote.MessageRow import com.notifyhub.viewer.databinding.FragmentMessagesBinding import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext class MessagesFragment : Fragment(), HomeActivity.Refreshable { private var _binding: FragmentMessagesBinding? = null private val binding get() = _binding!! private val app get() = (requireActivity().application as NotizViewerApp) private val items = mutableListOf() private lateinit var adapter: MessageAdapter override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { _binding = FragmentMessagesBinding.inflate(inflater, container, false) adapter = MessageAdapter(items) { row -> openDetail(row.id) } binding.messagesList.layoutManager = LinearLayoutManager(requireContext()) binding.messagesList.adapter = adapter binding.swipeRefresh.setOnRefreshListener { refresh() } return binding.root } override fun onDestroyView() { super.onDestroyView() _binding = null } override fun refresh() = load() override fun onResume() { super.onResume() if (items.isEmpty()) load() } private fun load() { lifecycleScope.launch { try { val response = withContext(Dispatchers.IO) { app.api.messages(page = 1, perPage = 50) } items.clear() response.body()?.data?.let { items.addAll(it) } adapter.notifyDataSetChanged() binding.emptyText.visibility = if (items.isEmpty()) View.VISIBLE else View.GONE binding.emptyText.text = getString(R.string.no_messages) } catch (e: Exception) { binding.emptyText.text = e.message ?: getString(R.string.no_messages) binding.emptyText.visibility = View.VISIBLE } finally { binding.swipeRefresh.isRefreshing = false } } } private fun openDetail(id: Int) { startActivity(android.content.Intent(requireContext(), MessageDetailActivity::class.java).apply { putExtra(MessageDetailActivity.EXTRA_ID, id) }) } }