import 'package:enaklo_pos/core/components/custom_modal_dialog.dart';
import 'package:enaklo_pos/core/components/spaces.dart';
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/presentation/home/bloc/checkout/checkout_bloc.dart';
import 'package:enaklo_pos/presentation/home/models/order_type.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

class TypeDialog extends StatefulWidget {
  const TypeDialog({super.key});

  @override
  State<TypeDialog> createState() => _TypeDialogState();
}

class _TypeDialogState extends State<TypeDialog> {
  List<Map<String, dynamic>> types = [
    {
      'value': 'dine_in',
      'label': 'Dine In',
      'icon': Icons.restaurant_outlined,
      'type': OrderType.dineIn,
    },
    {
      'value': 'take_away',
      'label': 'Take Away',
      'icon': Icons.takeout_dining_outlined,
      'type': OrderType.takeAway,
    },
    {
      'value': 'delivery',
      'label': 'Delivery',
      'icon': Icons.delivery_dining_outlined,
      'type': OrderType.delivery,
    },
    {
      'value': 'free_table',
      'label': 'Free Table',
      'icon': Icons.table_bar_outlined,
      'type': OrderType.freeTable,
    },
  ];

  @override
  Widget build(BuildContext context) {
    return CustomModalDialog(
      title: 'Pilih Tipe',
      subtitle: 'Silahkan pilih tipe yang sesuai',
      contentPadding:
          const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0),
      child: BlocBuilder<CheckoutBloc, CheckoutState>(
        builder: (context, state) {
          return state.maybeWhen(
              orElse: () => const SizedBox.shrink(),
              loaded: (
                items,
                discountModel,
                discount,
                discountAmount,
                tax,
                serviceCharge,
                totalQuantity,
                totalPrice,
                draftName,
                orderType,
                deliveryType,
              ) {
                return Column(
                  children: List.generate(types.length, (index) {
                    return _buildItem(
                      context,
                      types[index],
                      selectedType: orderType,
                    );
                  }),
                );
              });
        },
      ),
    );
  }

  Widget _buildItem(BuildContext context, Map<String, dynamic> type,
      {required OrderType selectedType}) {
    return GestureDetector(
      onTap: () {
        context.read<CheckoutBloc>().add(
              CheckoutEvent.updateOrderType(type['type']),
            );
        Navigator.pop(context);
      },
      child: Container(
        padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 16.0),
        margin: const EdgeInsets.only(bottom: 8.0),
        decoration: BoxDecoration(
          color: selectedType == type['type']
              ? AppColors.primary
              : AppColors.white,
          borderRadius: BorderRadius.circular(8.0),
          border: Border.all(
            color: selectedType == type['type']
                ? AppColors.primary
                : AppColors.grey,
            width: 1.0,
          ),
        ),
        child: Row(
          children: [
            Icon(type['icon'],
                color: selectedType == type['type']
                    ? AppColors.white
                    : AppColors.black),
            SpaceWidth(12.0),
            Expanded(
              child: Text(
                type['label']!,
                style: TextStyle(
                  fontSize: 16,
                  color: selectedType == type['type']
                      ? AppColors.white
                      : AppColors.black,
                  fontWeight: FontWeight.bold,
                ),
                maxLines: 2,
                overflow: TextOverflow.ellipsis,
              ),
            ),
            SpaceWidth(12.0),
            Icon(
              Icons.check_circle,
              color: selectedType == type['value']
                  ? AppColors.green
                  : Colors.transparent,
            ),
          ],
        ),
      ),
    );
  }
}
