import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:niogu_app/core/constants/app_color.dart';
import 'package:niogu_app/core/constants/app_font_size.dart';
import 'package:niogu_app/core/router/app_route.dart';
import 'package:niogu_app/core/utils/currency_format.dart';
import 'package:niogu_app/core/utils/extension_format.dart';
import 'package:niogu_app/core/utils/login_required.dart';
import 'package:niogu_app/core/enums/user_role.dart';
import 'package:niogu_app/core/widgets/custom_form_input.dart';
import 'package:niogu_app/core/widgets/custom_proof_image_uploader.dart';
import 'package:niogu_app/core/widgets/custom_text_form_field.dart';
import 'package:niogu_app/features/pos/domain/entities/pos.dart';
import 'package:niogu_app/features/pos/presentation/widgets/bill_summary.dart';
import 'package:niogu_app/features/pos/presentation/widgets/cart_item_tile.dart';
import 'package:niogu_app/features/pos/presentation/widgets/information_header.dart';
import 'package:sizer/sizer.dart';

class CartBottomSheet extends StatelessWidget {
  final bool isLoggedIn;
  final DraggableScrollableController sheetController;
  final GlobalKey<FormState> formKey;
  final String? currentUserName;
  final String? currentOutletName;
  final UserRole? currentUserRole;
  final List<CartItems> cartItems;
  final double shoppingAmount;
  final int productAmount;
  final double totalQty;
  final TextEditingController discountController;
  final TextEditingController taxController;
  final TextEditingController noteController;
  final TextEditingController nameController;
  final TextEditingController phoneNumberController;
  final TextEditingController addressController;
  final bool validateChange;
  final double totalBill;
  final VoidCallback onViewOrderPressed;
  final VoidCallback onOtherFormTap;
  final VoidCallback onCustomerFormTap;
  final bool isOtherFormVisible;
  final bool isCustomerFormVisible;
  final SelectedCustomer? selectedCustomer;
  final VoidCallback? onTapCloseSelectedCustomer;
  final TextEditingController payController;
  final void Function(String)? calculateChange;
  final double changeAmount;
  final String? imagePath;
  final void Function(CartItems) onDecrementTap;
  final void Function(CartItems) onIncrementTap;
  final void Function(CartItems) onEditPressed;
  final void Function(CartItems) onDeletePressed;
  final void Function(String)? discountOnChanged;
  final void Function(String)? taxOnChanged;
  final VoidCallback onTapImageAdd;
  final VoidCallback onTapImageRemove;
  final VoidCallback? onProccessPressed;

  const CartBottomSheet({
    super.key,
    required this.isLoggedIn,
    required this.sheetController,
    required this.formKey,
    this.currentUserName,
    this.currentOutletName,
    this.currentUserRole,
    required this.cartItems,
    required this.shoppingAmount,
    required this.productAmount,
    required this.totalQty,
    required this.discountController,
    required this.taxController,
    required this.noteController,
    required this.nameController,
    required this.phoneNumberController,
    required this.addressController,
    required this.validateChange,
    required this.totalBill,
    required this.onViewOrderPressed,
    required this.onOtherFormTap,
    required this.onCustomerFormTap,
    required this.isOtherFormVisible,
    required this.isCustomerFormVisible,
    required this.selectedCustomer,
    this.onTapCloseSelectedCustomer,
    required this.payController,
    required this.calculateChange,
    required this.changeAmount,
    required this.imagePath,
    required this.onDecrementTap,
    required this.onIncrementTap,
    required this.onEditPressed,
    required this.onDeletePressed,
    required this.discountOnChanged,
    required this.taxOnChanged,
    required this.onTapImageAdd,
    required this.onTapImageRemove,
    required this.onProccessPressed,
  });

  @override
  Widget build(BuildContext context) {
    final bool isTablet = 100.w >= 600;

    return DraggableScrollableSheet(
      controller: sheetController,
      initialChildSize: 0.24,
      minChildSize: 0.24,
      maxChildSize: 0.9,
      builder: (context, scrollController) {
        String? discountErrorText;
        String? taxErrorText;
        String? payErrorText;

        final double payAmount =
            double.tryParse(payController.text.trim()) ?? 0.0;

        final bool isViewChangeAmount =
            payAmount >= totalBill && cartItems.isNotEmpty;

        try {
          if (discountController.text.isNotEmpty) {
            final double discount = double.parse(
              discountController.text.trim(),
            );
            if (discount <= 0) {
              discountErrorText = "Diskon harus lebih dari 0";
            }
          }
        } catch (e) {
          discountErrorText = "Nominal diskon tidak valid";
        }

        try {
          if (taxController.text.isNotEmpty) {
            final double tax = double.parse(taxController.text.trim());
            if (tax <= 0) {
              taxErrorText = "Pajak harus lebih dari 0";
            }
          }
        } catch (e) {
          taxErrorText = "Nominal pajak tidak valid";
        }

        try {
          if (payController.text.isNotEmpty && validateChange) {
            final double payAmount = double.parse(payController.text.trim());
            if (payAmount <= 0) {
              payErrorText = "Nominal pembayaran harus lebih dari 0";
            }
            if (totalBill > payAmount) {
              payErrorText =
                  "Kurang ${CurrencyFormat.formatToIdr((totalBill - payAmount), 0)}";
            }
          }
        } catch (e) {
          payErrorText = "Nominal pembayaran tidak valid";
        }

        return Container(
          decoration: BoxDecoration(
            color: Colors.white,
            borderRadius: BorderRadius.vertical(top: Radius.circular(5.w)),
            boxShadow: [
              BoxShadow(
                color: Colors.black.withOpacity(0.1),
                blurRadius: 20,
                offset: const Offset(0, -5),
              ),
            ],
          ),
          child: ClipRRect(
            borderRadius: BorderRadiusGeometry.circular(2.5.w),
            child: Material(
              color: Colors.white,
              type: MaterialType.canvas,
              child: LayoutBuilder(
                builder: (context, constraints) {
                  final List<Widget> listChildren = [
                    Text(
                      "Daftar Pesanan",
                      style: TextStyle(
                        fontWeight: FontWeight.bold,
                        fontSize: isTablet
                            ? AppFontSize.medium.sp
                            : AppFontSize.small.sp,
                      ),
                    ),
                    SizedBox(height: 2.h),

                    if (cartItems.isEmpty)
                      Row(
                        children: [
                          Icon(
                            Icons.add_box_outlined,
                            size: 5.w,
                            color: Colors.grey,
                          ),
                          SizedBox(width: 2.5.w),
                          Text(
                            "Keranjang Kosong, Tambah Produk",
                            style: TextStyle(
                              color: Colors.grey,
                              fontSize: isTablet
                                  ? AppFontSize.medium.sp
                                  : AppFontSize.small.sp,
                            ),
                          ),
                        ],
                      )
                    else
                      ...List.generate(cartItems.length, (index) {
                        return CartItemTile(
                          cartItem: cartItems[index],
                          onDecrementTap: onDecrementTap,
                          onIncrementTap: onIncrementTap,
                          onEditPressed: onEditPressed,
                          onDeletePressed: onDeletePressed,
                        );
                      }),
                    Divider(height: 4.h),

                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: [
                        Expanded(
                          child: CustomTextFormField(
                            label: "Jumlah Produk",
                            controller: TextEditingController(
                              text: productAmount > 0
                                  ? productAmount.toString()
                                  : '',
                            ),
                            readOnly: true,
                          ),
                        ),
                        SizedBox(width: 4.w),
                        Expanded(
                          child: CustomTextFormField(
                            label: "Total Kuantitas Produk",
                            controller: TextEditingController(
                              text: totalQty > 0
                                  ? totalQty.toStringWithoutTrailingZero()
                                  : '',
                            ),
                            readOnly: true,
                          ),
                        ),
                      ],
                    ),
                    SizedBox(height: 3.h),

                    CustomTextFormField(
                      label: "Subtotal",
                      controller: TextEditingController(
                        text: shoppingAmount > 0
                            ? shoppingAmount.toStringWithoutTrailingZero()
                            : '',
                      ),
                      readOnly: true,
                    ),

                    SizedBox(height: 3.h),

                    Container(
                      decoration: BoxDecoration(
                        color: Colors.white,
                        borderRadius: BorderRadius.circular(2.5.w),
                        border: Border.all(color: Colors.grey.shade300),
                      ),
                      child: Column(
                        children: [
                          InkWell(
                            onTap: onOtherFormTap,
                            borderRadius: BorderRadius.vertical(
                              top: Radius.circular(2.5.w),
                              bottom: Radius.circular(
                                isOtherFormVisible ? 0 : 2.5.w,
                              ),
                            ),
                            child: Padding(
                              padding: EdgeInsets.symmetric(
                                horizontal: 4.w,
                                vertical: 1.5.h,
                              ),
                              child: Row(
                                children: [
                                  Container(
                                    padding: EdgeInsets.all(1.5.w),
                                    decoration: BoxDecoration(
                                      color: isOtherFormVisible
                                          ? AppColor.primaryColor.withOpacity(
                                              0.1,
                                            )
                                          : Colors.grey[100],
                                      shape: BoxShape.circle,
                                    ),
                                    child: Icon(
                                      Icons.info_outlined,
                                      color: isOtherFormVisible
                                          ? AppColor.primaryColor
                                          : Colors.grey,
                                      size: 5.w,
                                    ),
                                  ),
                                  SizedBox(width: 3.w),
                                  Expanded(
                                    child: Column(
                                      crossAxisAlignment:
                                          CrossAxisAlignment.start,
                                      children: [
                                        Text(
                                          "Informasi Lain",
                                          style: TextStyle(
                                            fontWeight: FontWeight.bold,
                                            fontSize: isTablet
                                                ? AppFontSize.medium.sp
                                                : AppFontSize.small.sp,
                                            color: Colors.black87,
                                          ),
                                        ),
                                        SizedBox(height: 1.h),
                                        Text(
                                          "Opsional (Diskon, Pajak, Catatan)",
                                          style: TextStyle(
                                            fontSize: isTablet
                                                ? AppFontSize.medium.sp
                                                : AppFontSize.small.sp,
                                            color: Colors.grey,
                                          ),
                                        ),
                                      ],
                                    ),
                                  ),
                                  Icon(
                                    isOtherFormVisible
                                        ? Icons.keyboard_arrow_up_rounded
                                        : Icons.keyboard_arrow_down_rounded,
                                    color: Colors.grey,
                                    size: 6.w,
                                  ),
                                ],
                              ),
                            ),
                          ),
                          if (isOtherFormVisible) ...[
                            Divider(height: 1, color: Colors.grey.shade200),
                            Padding(
                              padding: EdgeInsets.all(4.w),
                              child: Column(
                                children: [
                                  CustomFormInput(
                                    label: "Diskon (Rp)",
                                    icon: Icons.discount_outlined,
                                    controller: discountController,
                                    onChanged: discountOnChanged,
                                    inputType: TextInputType.number,
                                    validator: (value) {
                                      if (value != null && value.isNotEmpty) {
                                        try {
                                          final double discount = double.parse(
                                            value,
                                          );
                                          if (discount <= 0) {
                                            return "Diskon harus lebih dari 0";
                                          }
                                        } catch (e) {
                                          return "Nominal diskon tidak valid";
                                        }
                                      }
                                      return null;
                                    },
                                    errorText: discountErrorText,
                                  ),
                                  SizedBox(height: 1.5.h),
                                  CustomFormInput(
                                    label: "Pajak (Rp)",
                                    icon: Icons.money_outlined,
                                    controller: taxController,
                                    onChanged: taxOnChanged,
                                    inputType: TextInputType.number,
                                    validator: (value) {
                                      if (value != null && value.isNotEmpty) {
                                        try {
                                          final double tax = double.parse(
                                            value,
                                          );
                                          if (tax <= 0) {
                                            return "Pajak harus lebih dari 0";
                                          }
                                        } catch (e) {
                                          return "Nominal pajak tidak valid";
                                        }
                                      }
                                      return null;
                                    },
                                    errorText: taxErrorText,
                                  ),
                                  SizedBox(height: 1.5.h),
                                  CustomFormInput(
                                    label: "Catatan",
                                    icon: Icons.note_alt_outlined,
                                    controller: noteController,
                                  ),
                                ],
                              ),
                            ),
                          ],
                        ],
                      ),
                    ),

                    SizedBox(height: 3.h),

                    Container(
                      decoration: BoxDecoration(
                        color: Colors.white,
                        borderRadius: BorderRadius.circular(2.5.w),
                        border: Border.all(color: Colors.grey.shade300),
                      ),
                      child: Column(
                        children: [
                          InkWell(
                            onTap: onCustomerFormTap,
                            borderRadius: BorderRadius.vertical(
                              top: Radius.circular(2.5.w),
                              bottom: Radius.circular(
                                isCustomerFormVisible ? 0 : 2.5.w,
                              ),
                            ),
                            child: Padding(
                              padding: EdgeInsets.symmetric(
                                horizontal: 4.w,
                                vertical: 1.5.h,
                              ),
                              child: Row(
                                children: [
                                  Container(
                                    padding: EdgeInsets.all(1.5.w),
                                    decoration: BoxDecoration(
                                      color: isCustomerFormVisible
                                          ? AppColor.primaryColor.withOpacity(
                                              0.1,
                                            )
                                          : Colors.grey[100],
                                      shape: BoxShape.circle,
                                    ),
                                    child: Icon(
                                      Icons.person_outline_rounded,
                                      color: isCustomerFormVisible
                                          ? AppColor.primaryColor
                                          : Colors.grey,
                                      size: 5.w,
                                    ),
                                  ),
                                  SizedBox(width: 3.w),
                                  Expanded(
                                    child: Column(
                                      crossAxisAlignment:
                                          CrossAxisAlignment.start,
                                      children: [
                                        Text(
                                          "Informasi Pelanggan",
                                          style: TextStyle(
                                            fontWeight: FontWeight.bold,
                                            fontSize: isTablet
                                                ? AppFontSize.medium.sp
                                                : AppFontSize.small.sp,
                                            color: Colors.black87,
                                          ),
                                        ),
                                        SizedBox(height: 1.h),
                                        Text(
                                          "Opsional (Nama, No. Hp / WA)",
                                          style: TextStyle(
                                            fontSize: isTablet
                                                ? AppFontSize.medium.sp
                                                : AppFontSize.small.sp,
                                            color: Colors.grey,
                                          ),
                                        ),
                                      ],
                                    ),
                                  ),
                                  Icon(
                                    isCustomerFormVisible
                                        ? Icons.keyboard_arrow_up_rounded
                                        : Icons.keyboard_arrow_down_rounded,
                                    color: Colors.grey,
                                    size: 6.w,
                                  ),
                                ],
                              ),
                            ),
                          ),
                          if (isCustomerFormVisible) ...[
                            Divider(height: 1, color: Colors.grey.shade200),
                            Padding(
                              padding: EdgeInsets.all(4.w),
                              child: selectedCustomer != null
                                  ? Container(
                                      width: double.infinity,
                                      padding: EdgeInsets.all(4.w),
                                      decoration: BoxDecoration(
                                        color: AppColor.primaryColor
                                            .withOpacity(0.05),
                                        borderRadius: BorderRadius.circular(
                                          2.5.w,
                                        ),
                                        border: Border.all(
                                          color: AppColor.primaryColor
                                              .withOpacity(0.3),
                                        ),
                                      ),
                                      child: Row(
                                        children: [
                                          Container(
                                            padding: EdgeInsets.all(2.w),
                                            decoration: BoxDecoration(
                                              color: Colors.white,
                                              shape: BoxShape.circle,
                                              border: Border.all(
                                                color: AppColor.primaryColor
                                                    .withOpacity(0.2),
                                              ),
                                            ),
                                            child: Icon(
                                              Icons.person,
                                              color: AppColor.primaryColor,
                                              size: 5.w,
                                            ),
                                          ),
                                          SizedBox(width: 3.w),
                                          Expanded(
                                            child: Column(
                                              crossAxisAlignment:
                                                  CrossAxisAlignment.start,
                                              children: [
                                                Text(
                                                  selectedCustomer!.name,
                                                  style: TextStyle(
                                                    fontSize: isTablet
                                                        ? AppFontSize.medium.sp
                                                        : AppFontSize.small.sp,
                                                    fontWeight: FontWeight.bold,
                                                    color: Colors.black87,
                                                  ),
                                                ),
                                                if (selectedCustomer!
                                                    .phoneNumber
                                                    .isNotEmpty) ...[
                                                  SizedBox(height: 0.75.h),
                                                  Row(
                                                    children: [
                                                      Icon(
                                                        Icons.phone_android,
                                                        size: 5.w,
                                                        color: Colors.grey[600],
                                                      ),
                                                      SizedBox(width: 1.w),
                                                      Text(
                                                        selectedCustomer!
                                                            .phoneNumber,
                                                        style: TextStyle(
                                                          fontSize: isTablet
                                                              ? AppFontSize
                                                                    .medium
                                                                    .sp
                                                              : AppFontSize
                                                                    .small
                                                                    .sp,
                                                          color:
                                                              Colors.grey[700],
                                                        ),
                                                      ),
                                                    ],
                                                  ),
                                                ],

                                                if (selectedCustomer!
                                                    .address
                                                    .isNotEmpty) ...[
                                                  SizedBox(height: 0.75.h),
                                                  Row(
                                                    crossAxisAlignment:
                                                        CrossAxisAlignment
                                                            .start,
                                                    children: [
                                                      Icon(
                                                        Icons
                                                            .location_on_outlined,
                                                        size: 5.w,
                                                        color: Colors.grey[600],
                                                      ),
                                                      SizedBox(width: 1.w),
                                                      Expanded(
                                                        child: Text(
                                                          selectedCustomer!
                                                              .address,
                                                          style: TextStyle(
                                                            fontSize: isTablet
                                                                ? AppFontSize
                                                                      .medium
                                                                      .sp
                                                                : AppFontSize
                                                                      .small
                                                                      .sp,
                                                            color: Colors
                                                                .grey[700],
                                                          ),
                                                        ),
                                                      ),
                                                    ],
                                                  ),
                                                ],
                                              ],
                                            ),
                                          ),
                                          InkWell(
                                            onTap: onTapCloseSelectedCustomer,
                                            child: Icon(
                                              Icons.close,
                                              color: Colors.grey,
                                              size: 5.w,
                                            ),
                                          ),
                                        ],
                                      ),
                                    )
                                  : Column(
                                      children: [
                                        SizedBox(
                                          width: double.infinity,
                                          height: 5.5.h,
                                          child: OutlinedButton.icon(
                                            onPressed: () => !isLoggedIn
                                                ? LoginRequired.showLoginRequired(
                                                    context,
                                                  )
                                                : context.pushNamed(
                                                    AppRoute
                                                        .alreadyCustomerScreen,
                                                  ),
                                            style: OutlinedButton.styleFrom(
                                              side: BorderSide(
                                                color: AppColor.primaryColor,
                                              ),
                                              shape: RoundedRectangleBorder(
                                                borderRadius:
                                                    BorderRadius.circular(
                                                      2.5.w,
                                                    ),
                                              ),
                                              backgroundColor: Colors.blue[50],
                                            ),
                                            icon: Icon(
                                              Icons.people_alt_rounded,
                                              color: AppColor.primaryColor,
                                              size: 5.w,
                                            ),
                                            label: Text(
                                              "Pilih Pelanggan Tersedia",
                                              style: TextStyle(
                                                color: AppColor.primaryColor,
                                                fontWeight: FontWeight.bold,
                                                fontSize: AppFontSize.medium.sp,
                                              ),
                                            ),
                                          ),
                                        ),
                                        SizedBox(height: 2.h),
                                        Row(
                                          children: [
                                            Expanded(
                                              child: Divider(
                                                color: Colors.grey.shade300,
                                              ),
                                            ),
                                            Padding(
                                              padding: EdgeInsets.symmetric(
                                                horizontal: 3.w,
                                              ),
                                              child: Text(
                                                "Atau Input Manual",
                                                style: TextStyle(
                                                  fontSize: isTablet
                                                      ? (AppFontSize.medium - 2)
                                                            .sp
                                                      : (AppFontSize.small - 2)
                                                            .sp,
                                                  fontWeight: FontWeight.bold,
                                                  color: Colors.grey[400],
                                                ),
                                              ),
                                            ),
                                            Expanded(
                                              child: Divider(
                                                color: Colors.grey.shade300,
                                              ),
                                            ),
                                          ],
                                        ),
                                        SizedBox(height: 2.h),
                                        CustomFormInput(
                                          label: "Nama Pelanggan",
                                          icon: Icons.person,
                                          controller: nameController,
                                        ),
                                        SizedBox(height: 1.5.h),
                                        CustomFormInput(
                                          label: "No. Hp / WA",
                                          hint: "Opsional",
                                          icon: Icons.phone_android,
                                          controller: phoneNumberController,
                                          inputType: TextInputType.phone,
                                        ),
                                        /**
                                        SizedBox(height: 1.5.h),
                                        CustomFormInput(
                                          label: "Alamat",
                                          hint: "Opsional",
                                          icon: Icons.location_on_outlined,
                                          controller: addressController,
                                        ),
                                        */
                                      ],
                                    ),
                            ),
                          ],
                        ],
                      ),
                    ),

                    SizedBox(height: 3.h),

                    BillSummary(
                      label: "Total Tagihan",
                      value: totalBill > 0
                          ? CurrencyFormat.formatToIdr(totalBill, 0)
                          : '',
                    ),

                    SizedBox(height: 3.h),

                    Text(
                      "Pembayaran",
                      style: TextStyle(
                        fontWeight: FontWeight.bold,
                        fontSize: isTablet
                            ? AppFontSize.medium.sp
                            : AppFontSize.small.sp,
                      ),
                    ),
                    SizedBox(height: 1.h),

                    TextFormField(
                      controller: payController,
                      keyboardType: TextInputType.number,
                      style: TextStyle(
                        fontSize: isTablet
                            ? AppFontSize.medium.sp
                            : AppFontSize.small.sp,
                      ),
                      autovalidateMode: AutovalidateMode.onUserInteraction,
                      validator: (value) {
                        try {
                          if (value == null || value.isEmpty) {
                            return "Masukkan nominal pembayaran";
                          }
                          final double payAmount = double.parse(value);
                          if (payAmount <= 0) {
                            return "Nominal pembayaran harus lebih dari 0";
                          }
                        } catch (e) {
                          return "Nominal pembayaran tidak valid";
                        }
                        return null;
                      },
                      onChanged: calculateChange,
                      decoration: InputDecoration(
                        labelText: "Bayar (Rp)",
                        labelStyle: TextStyle(
                          color: Colors.blue,
                          fontSize: AppFontSize.medium.sp,
                        ),
                        prefixIcon: Padding(
                          padding: isTablet
                              ? EdgeInsets.symmetric(horizontal: 3.w)
                              : EdgeInsets.zero,
                          child: Icon(
                            Icons.payments_outlined,
                            color: Colors.blue,
                            size: 5.w,
                          ),
                        ),
                        border: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(2.5.w),
                        ),
                        errorText: payErrorText,
                        errorStyle: TextStyle(
                          color: Colors.red,
                          fontSize: isTablet
                              ? AppFontSize.medium.sp
                              : AppFontSize.small.sp,
                        ),
                        errorBorder: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(2.5.w),
                          borderSide: const BorderSide(color: Colors.redAccent),
                        ),
                        enabledBorder: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(2.5.w),
                          borderSide: const BorderSide(color: Colors.blue),
                        ),
                        contentPadding: EdgeInsets.symmetric(
                          vertical: isTablet ? 3.6.h : 1.8.h,
                        ),
                      ),
                    ),

                    SizedBox(height: 2.h),

                    TextField(
                      controller: TextEditingController(
                        text: isViewChangeAmount
                            ? CurrencyFormat.formatToIdr(changeAmount, 0)
                            : '',
                      ),
                      readOnly: true,
                      decoration: InputDecoration(
                        labelText: "Kembali",
                        labelStyle: TextStyle(fontSize: AppFontSize.medium.sp),
                        prefixIcon: Padding(
                          padding: isTablet
                              ? EdgeInsets.symmetric(horizontal: 3.w)
                              : EdgeInsets.zero,
                          child: Icon(
                            Icons.change_circle_outlined,
                            color: Colors.green,
                            size: 5.w,
                          ),
                        ),
                        filled: true,
                        fillColor: Colors.grey[100],
                        border: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(2.5.w),
                          borderSide: BorderSide.none,
                        ),
                        contentPadding: EdgeInsets.symmetric(
                          vertical: isTablet ? 3.6.h : 1.8.h,
                        ),
                      ),
                      style: TextStyle(
                        fontSize: isTablet
                            ? AppFontSize.medium.sp
                            : AppFontSize.small.sp,
                        fontWeight: FontWeight.bold,
                        color: Colors.green[700],
                      ),
                    ),

                    SizedBox(height: 3.h),

                    CustomProofImageUploader(
                      imagePath: imagePath,
                      title: "Upload Bukti Pembayaran",
                      onTapImageAdd: onTapImageAdd,
                      onTapImageRemove: onTapImageRemove,
                    ),

                    SizedBox(height: 3.h),

                    SizedBox(
                      width: double.infinity,
                      height: 6.5.h,
                      child: ElevatedButton(
                        onPressed: onProccessPressed,
                        style: ElevatedButton.styleFrom(
                          backgroundColor: AppColor.primaryColor,
                          shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(2.5.w),
                          ),
                          disabledBackgroundColor: Colors.grey.shade300,
                        ),
                        child: Text(
                          "Proses Penjualan",
                          style: TextStyle(
                            color: Colors.white,
                            fontSize: AppFontSize.medium.sp,
                            fontWeight: FontWeight.bold,
                          ),
                        ),
                      ),
                    ),

                    SizedBox(
                      height: MediaQuery.of(context).viewInsets.bottom + 2.h,
                    ),
                  ];

                  final bool isSquashed = constraints.maxHeight < 250;

                  if (isSquashed) {
                    return SingleChildScrollView(
                      controller: scrollController,
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.stretch,
                        children: [
                          InformationHeader(
  
                            currentUserName: currentUserName,
                            currentOutletName: currentOutletName,
                            currentUserRole: currentUserRole,
                          ),
                          Center(
                            child: Container(
                              margin: EdgeInsets.only(top: 1.5.h),
                              width: 15.w,
                              height: 0.6.h,
                              decoration: BoxDecoration(
                                color: Colors.grey[300],
                                borderRadius: BorderRadius.circular(2.5.w),
                              ),
                            ),
                          ),
                          Padding(
                            padding: EdgeInsets.symmetric(
                              horizontal: 5.w,
                              vertical: 1.h,
                            ),
                            child: Row(
                              children: [
                                Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: [
                                    Text(
                                      "Total Belanja",
                                      style: TextStyle(
                                        color: Colors.grey,
                                        fontSize: isTablet
                                            ? AppFontSize.medium.sp
                                            : AppFontSize.small.sp,
                                      ),
                                    ),
                                    Text(
                                      CurrencyFormat.formatToIdr(
                                        shoppingAmount,
                                        0,
                                      ),
                                      style: TextStyle(
                                        fontWeight: FontWeight.bold,
                                        fontSize: AppFontSize.medium.sp,
                                        color: Colors.black,
                                      ),
                                    ),
                                  ],
                                ),
                                const Spacer(),
                                ElevatedButton.icon(
                                  onPressed: onViewOrderPressed,
                                  style: ElevatedButton.styleFrom(
                                    backgroundColor: AppColor.primaryColor,
                                    padding: EdgeInsets.symmetric(
                                      horizontal: 6.w,
                                      vertical: 1.h,
                                    ),
                                    shape: RoundedRectangleBorder(
                                      borderRadius: BorderRadius.circular(
                                        2.5.w,
                                      ),
                                    ),
                                  ),
                                  icon: Icon(
                                    Icons.shopping_bag_outlined,
                                    color: Colors.white,
                                    size: 5.w,
                                  ),
                                  label: Text(
                                    "Lihat Pesanan",
                                    style: TextStyle(
                                      color: Colors.white,
                                      fontSize: AppFontSize.medium.sp,
                                      fontWeight: FontWeight.bold,
                                    ),
                                  ),
                                ),
                              ],
                            ),
                          ),
                          const Divider(height: 1),
                          Form(
                            key: formKey,
                            child: Padding(
                              padding: EdgeInsets.fromLTRB(5.w, 2.h, 5.w, 5.h),
                              child: Column(
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: listChildren,
                              ),
                            ),
                          ),
                        ],
                      ),
                    );
                  }

                  return Column(
                    crossAxisAlignment: CrossAxisAlignment.stretch,
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      InformationHeader(
                        currentUserName: currentUserName,
                        currentOutletName: currentOutletName,
                        currentUserRole: currentUserRole,
                      ),
                      Center(
                        child: Container(
                          margin: EdgeInsets.only(top: 1.5.h),
                          width: 15.w,
                          height: 0.6.h,
                          decoration: BoxDecoration(
                            color: Colors.grey[300],
                            borderRadius: BorderRadius.circular(2.5.w),
                          ),
                        ),
                      ),
                      Padding(
                        padding: EdgeInsets.symmetric(
                          horizontal: 5.w,
                          vertical: 1.h,
                        ),
                        child: Row(
                          children: [
                            Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: [
                                Text(
                                  "Total Belanja",
                                  style: TextStyle(
                                    color: Colors.grey,
                                    fontSize: isTablet
                                        ? AppFontSize.medium.sp
                                        : AppFontSize.small.sp,
                                  ),
                                ),
                                Text(
                                  CurrencyFormat.formatToIdr(shoppingAmount, 0),
                                  style: TextStyle(
                                    fontWeight: FontWeight.bold,
                                    fontSize: AppFontSize.medium.sp,
                                    color: Colors.black,
                                  ),
                                ),
                              ],
                            ),
                            const Spacer(),
                            ElevatedButton.icon(
                              onPressed: onViewOrderPressed,
                              style: ElevatedButton.styleFrom(
                                backgroundColor: AppColor.primaryColor,
                                padding: EdgeInsets.symmetric(
                                  horizontal: 6.w,
                                  vertical: 1.h,
                                ),
                                shape: RoundedRectangleBorder(
                                  borderRadius: BorderRadius.circular(2.5.w),
                                ),
                              ),
                              icon: Icon(
                                Icons.shopping_bag_outlined,
                                color: Colors.white,
                                size: 5.w,
                              ),
                              label: Text(
                                "Lihat Pesanan",
                                style: TextStyle(
                                  color: Colors.white,
                                  fontSize: AppFontSize.medium.sp,
                                  fontWeight: FontWeight.bold,
                                ),
                              ),
                            ),
                          ],
                        ),
                      ),
                      const Divider(height: 1),
                      Expanded(
                        child: Form(
                          key: formKey,
                          child: ListView(
                            controller: scrollController,
                            padding: EdgeInsets.fromLTRB(5.w, 2.h, 5.w, 5.h),
                            children: listChildren,
                          ),
                        ),
                      ),
                    ],
                  );
                },
              ),
            ),
          ),
        );
      },
    );
  }
}
