package com.brisco.meatwholesaler;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.snackbar.Snackbar;

import java.util.ArrayList;
import java.util.List;

public class CartActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private CartAdapter cartAdapter;
    private TextView textViewEmpty;
    private TextView textViewTotal;
    private TextView textViewItemCount;
    private Button buttonCheckout;
    private Button buttonContinueShopping;
    
    private CartManager cartManager;
    private List<Product> cartItems;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cart);

        // Initialize cart manager
        cartManager = CartManager.getInstance(this);

        // Setup toolbar
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setTitle("Shopping Cart");
        }

        // Initialize views
        initializeViews();

        // Setup RecyclerView
        setupRecyclerView();

        // Load cart data
        loadCartData();

        // Setup click listeners
        setupClickListeners();
    }

    private void initializeViews() {
        recyclerView = findViewById(R.id.recycler_cart);
        textViewEmpty = findViewById(R.id.text_empty);
        textViewTotal = findViewById(R.id.text_total);
        textViewItemCount = findViewById(R.id.text_item_count);
        buttonCheckout = findViewById(R.id.btn_checkout);
        buttonContinueShopping = findViewById(R.id.btn_continue_shopping);
    }

    private void setupRecyclerView() {
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setHasFixedSize(true);
        
        cartItems = new ArrayList<>();
        cartAdapter = new CartAdapter(this, cartItems, new CartAdapter.CartItemListener() {
            @Override
            public void onQuantityChanged() {
                updateCartTotals();
            }

            @Override
            public void onItemRemoved(int position) {
                cartItems.remove(position);
                cartAdapter.notifyItemRemoved(position);
                updateCartTotals();
                updateEmptyState();
                
                // Show undo option
                Snackbar.make(findViewById(android.R.id.content), 
                        "Item removed from cart", 
                        Snackbar.LENGTH_LONG)
                        .setAction("UNDO", v -> {
                            // In a real app, you'd want to restore the item
                            Toast.makeText(CartActivity.this, "Undo functionality coming soon", Toast.LENGTH_SHORT).show();
                        })
                        .show();
            }
        });
        
        recyclerView.setAdapter(cartAdapter);
    }

    private void loadCartData() {
        cartItems.clear();
        cartItems.addAll(cartManager.getCartItems());
        cartAdapter.notifyDataSetChanged();
        
        updateCartTotals();
        updateEmptyState();
    }

    private void updateCartTotals() {
        double total = cartManager.getCartTotal();
        int itemCount = cartManager.getCartCount();
        
        textViewTotal.setText(String.format("R %.2f", total));
        textViewItemCount.setText(String.format("%d items", itemCount));
        
        // Enable/disable checkout button based on cart contents
        buttonCheckout.setEnabled(itemCount > 0);
    }

    private void updateEmptyState() {
        if (cartItems.isEmpty()) {
            textViewEmpty.setVisibility(View.VISIBLE);
            recyclerView.setVisibility(View.GONE);
            buttonCheckout.setVisibility(View.GONE);
        } else {
            textViewEmpty.setVisibility(View.GONE);
            recyclerView.setVisibility(View.VISIBLE);
            buttonCheckout.setVisibility(View.VISIBLE);
        }
    }

    private void setupClickListeners() {
        buttonCheckout.setOnClickListener(v -> {
            if (!cartManager.isEmpty()) {
                Intent intent = new Intent(CartActivity.this, CheckoutActivity.class);
                startActivity(intent);
            }
        });

        buttonContinueShopping.setOnClickListener(v -> {
            Intent intent = new Intent(CartActivity.this, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
            finish();
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        loadCartData();
    }

    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return true;
    }
}
