import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

import '../../../application/checkout/checkout_form/checkout_form_bloc.dart';
import '../../../common/extension/extension.dart';
import '../../../common/theme/theme.dart';
import '../../../domain/product/product.dart';
import '../dialog/dialog.dart';
import '../image/image.dart';
import '../spaces/space.dart';

class ProductCard extends StatelessWidget {
  final Product product;
  const ProductCard({super.key, required this.product});

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        if (product.isActive == true) {
          if (product.variants.isEmpty) {
            context.read<CheckoutFormBloc>().add(
              CheckoutFormEvent.addItem(product, null),
            );
          } else {
            showDialog(
              context: context,
              builder: (context) => VariantDialog(product: product),
            );
          }
        }
      },
      child: Container(
        decoration: BoxDecoration(
          color: AppColor.white,
          borderRadius: BorderRadius.circular(8.0),
          border: Border.all(color: AppColor.disabled),
        ),
        child: Stack(
          children: [
            Padding(
              padding: const EdgeInsets.all(4.0),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.start,
                children: [
                  ClipRRect(
                    borderRadius: const BorderRadius.all(Radius.circular(8.0)),
                    child: product.imageUrl == ""
                        ? Container(
                            width: double.infinity,
                            height: 120,
                            decoration: BoxDecoration(
                              color: AppColor.disabled.withOpacity(0.4),
                            ),
                            child: const Icon(
                              Icons.image,
                              color: AppColor.textSecondary,
                            ),
                          )
                        : AppNetworkImage(
                            url: product.imageUrl,
                            fit: BoxFit.fill,
                            width: double.infinity,
                            height: 140,
                          ),
                  ),
                  const Spacer(),
                  Text(
                    product.name,
                    style: AppStyle.md.copyWith(fontWeight: FontWeight.w700),
                    maxLines: 1,
                    overflow: TextOverflow.ellipsis,
                  ),
                  const SpaceHeight(4),
                  Align(
                    alignment: Alignment.center,
                    child: Text(
                      product.price.currencyFormatRp,
                      style: const TextStyle(
                        fontWeight: FontWeight.bold,
                        fontSize: 12,
                      ),
                    ),
                  ),
                  const SpaceHeight(4),
                ],
              ),
            ),

            BlocBuilder<CheckoutFormBloc, CheckoutFormState>(
              builder: (context, state) {
                final totalQuantity = state.items
                    .where((item) => item.product.id == product.id)
                    .map((item) => item.quantity)
                    .fold(0, (sum, qty) => sum + qty);

                if (totalQuantity == 0) {
                  return const SizedBox.shrink();
                }
                return Positioned(
                  top: 4,
                  right: 4,
                  child: Container(
                    width: 40,
                    height: 40,
                    padding: const EdgeInsets.all(6),
                    decoration: const BoxDecoration(
                      borderRadius: BorderRadius.all(Radius.circular(9.0)),
                      color: AppColor.primary,
                    ),
                    child: Center(
                      child: Text(
                        totalQuantity.toString(),
                        style: const TextStyle(
                          color: Colors.white,
                          fontSize: 20,
                          fontWeight: FontWeight.bold,
                        ),
                      ),
                    ),
                  ),
                );
              },
            ),
            if (product.isActive == false)
              Container(
                width: double.infinity,
                decoration: BoxDecoration(
                  borderRadius: const BorderRadius.all(Radius.circular(8.0)),
                  color: AppColor.disabled.withOpacity(0.5),
                ),
              ),
          ],
        ),
      ),
    );
  }
}
