package uk.beads.manager import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import uk.beads.manager.databinding.ActivityOrdersBinding class OrdersActivity : AppCompatActivity() { private lateinit var binding: ActivityOrdersBinding private val adapter = OrdersAdapter { order -> val intent = Intent(this, OrderDetailActivity::class.java) intent.putExtra("order_id", order.id) startActivity(intent) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityOrdersBinding.inflate(layoutInflater) setContentView(binding.root) binding.recyclerOrders.layoutManager = LinearLayoutManager(this) binding.recyclerOrders.adapter = adapter binding.btnLogout.setOnClickListener { SessionManager.clear(this) startActivity(Intent(this, LoginActivity::class.java)) finish() } binding.swipeRefresh.setOnRefreshListener { loadOrders() } SessionInitializer.init(this) { runOnUiThread { loadOrders() } } } override fun onResume() { super.onResume() OrderPollingService.start(this) } override fun onPause() { super.onPause() OrderPollingService.stop(this) } private fun loadOrders() { binding.swipeRefresh.isRefreshing = true Thread { try { val orders = ApiClient.fetchOrders(this) runOnUiThread { adapter.submit(orders) binding.emptyText.visibility = if (orders.isEmpty()) View.VISIBLE else View.GONE binding.swipeRefresh.isRefreshing = false } } catch (e: Exception) { runOnUiThread { binding.swipeRefresh.isRefreshing = false binding.emptyText.text = "Could not load orders" binding.emptyText.visibility = View.VISIBLE } } }.start() } } class OrdersAdapter(private val onClick: (OrderDto) -> Unit) : RecyclerView.Adapter() { private var items: List = emptyList() fun submit(list: List) { items = list notifyDataSetChanged() } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder { val view = LayoutInflater.from(parent.context) .inflate(R.layout.item_order, parent, false) return Holder(view) } override fun getItemCount() = items.size override fun onBindViewHolder(holder: Holder, position: Int) { holder.bind(items[position], onClick) } class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) { private val title: TextView = itemView.findViewById(R.id.textTitle) private val subtitle: TextView = itemView.findViewById(R.id.textSubtitle) private val total: TextView = itemView.findViewById(R.id.textTotal) fun bind(order: OrderDto, onClick: (OrderDto) -> Unit) { title.text = "#${order.orderNumber}" subtitle.text = "${order.customer.firstName} ${order.customer.lastName}" total.text = "£${"%.2f".format(order.total)}" itemView.setOnClickListener { onClick(order) } } } }