part of 'dialog.dart';

class OrderTypeDialog extends StatelessWidget {
  const OrderTypeDialog({super.key});

  @override
  Widget build(BuildContext context) {
    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,
      },
    ];
    return CustomModalDialog(
      title: 'Pilih Tipe',
      subtitle: 'Silahkan pilih tipe yang sesuai',
      contentPadding: const EdgeInsets.symmetric(
        horizontal: 16.0,
        vertical: 24.0,
      ),
      child: BlocBuilder<CheckoutFormBloc, CheckoutFormState>(
        builder: (context, state) {
          return Column(
            children: List.generate(types.length, (index) {
              return _buildItem(
                context,
                types[index],
                selectedType: state.orderType,
              );
            }),
          );
        },
      ),
    );
  }

  Widget _buildItem(
    BuildContext context,
    Map<String, dynamic> type, {
    required OrderType selectedType,
  }) {
    return GestureDetector(
      onTap: () {
        context.read<CheckoutFormBloc>().add(
          CheckoutFormEvent.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']
              ? AppColor.primary
              : AppColor.white,
          borderRadius: BorderRadius.circular(8.0),
          border: Border.all(
            color: selectedType == type['type']
                ? AppColor.primary
                : AppColor.textSecondary,
            width: 1.0,
          ),
        ),
        child: Row(
          children: [
            Icon(
              type['icon'],
              color: selectedType == type['type']
                  ? AppColor.white
                  : AppColor.black,
            ),
            const SpaceWidth(12.0),
            Expanded(
              child: Text(
                type['label']!,
                style: AppStyle.lg.copyWith(
                  color: selectedType == type['type']
                      ? AppColor.white
                      : AppColor.black,
                  fontWeight: FontWeight.bold,
                ),
                maxLines: 2,
                overflow: TextOverflow.ellipsis,
              ),
            ),
            const SpaceWidth(12.0),
            Icon(
              Icons.check_circle,
              color: selectedType == type['value']
                  ? AppColor.success
                  : Colors.transparent,
            ),
          ],
        ),
      ),
    );
  }
}
