package com.brisco.meatwholesaler;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;

import java.util.List;

public class CartAdapter extends RecyclerView.Adapter<CartAdapter.CartViewHolder> {

    private Context context;
    private List<Product> cartItems;
    private CartItemListener listener;
    private CartManager cartManager;

    public interface CartItemListener {
        void onQuantityChanged();
        void onItemRemoved(int position);
    }

    public CartAdapter(Context context, List<Product> cartItems, CartItemListener listener) {
        this.context = context;
        this.cartItems = cartItems;
        this.listener = listener;
        this.cartManager = CartManager.getInstance(context);
    }

    @NonNull
    @Override
    public CartViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_cart, parent, false);
        return new CartViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull CartViewHolder holder, int position) {
        Product product = cartItems.get(position);
        
        holder.textViewName.setText(product.getName());
        holder.textViewPrice.setText(product.getFormattedPrice());
        
        // Load image if available
        if (product.getImageUrl() != null && !product.getImageUrl().isEmpty()) {
            try {
                int imageResId = context.getResources().getIdentifier(product.getImageUrl(), "drawable", context.getPackageName());
                if (imageResId != 0) {
                    holder.imageViewProduct.setImageResource(imageResId);
                } else {
                    holder.imageViewProduct.setImageResource(R.drawable.ic_launcher_background);
                }
            } catch (Exception e) {
                holder.imageViewProduct.setImageResource(R.drawable.ic_launcher_background);
            }
        } else {
            holder.imageViewProduct.setImageResource(R.drawable.ic_launcher_background);
        }

        // Show quantity for this product
        int quantity = cartManager.getProductQuantity(product);
        holder.textViewQuantity.setText(String.valueOf(quantity));

        // Setup quantity controls
        holder.buttonIncrease.setOnClickListener(v -> {
            cartManager.addProduct(product);
            updateQuantityDisplay(holder, product);
            if (listener != null) listener.onQuantityChanged();
        });

        holder.buttonDecrease.setOnClickListener(v -> {
            if (quantity > 1) {
                cartManager.removeProducts(product, 1);
                updateQuantityDisplay(holder, product);
                if (listener != null) listener.onQuantityChanged();
            }
        });

        // Setup remove button
        holder.buttonRemove.setOnClickListener(v -> {
            cartManager.removeProducts(product, quantity);
            if (listener != null) listener.onItemRemoved(position);
        });
    }

    private void updateQuantityDisplay(CartViewHolder holder, Product product) {
        int quantity = cartManager.getProductQuantity(product);
        holder.textViewQuantity.setText(String.valueOf(quantity));
    }

    @Override
    public int getItemCount() {
        return cartItems.size();
    }

    static class CartViewHolder extends RecyclerView.ViewHolder {
        ImageView imageViewProduct;
        TextView textViewName;
        TextView textViewPrice;
        TextView textViewQuantity;
        ImageButton buttonIncrease;
        ImageButton buttonDecrease;
        ImageButton buttonRemove;

        public CartViewHolder(@NonNull View itemView) {
            super(itemView);
            imageViewProduct = itemView.findViewById(R.id.image_product);
            textViewName = itemView.findViewById(R.id.text_name);
            textViewPrice = itemView.findViewById(R.id.text_price);
            textViewQuantity = itemView.findViewById(R.id.text_quantity);
            buttonIncrease = itemView.findViewById(R.id.btn_increase);
            buttonDecrease = itemView.findViewById(R.id.btn_decrease);
            buttonRemove = itemView.findViewById(R.id.btn_remove);
        }
    }
}
