  import 'package:dropdown_button2/dropdown_button2.dart';
  import 'package:flutter/cupertino.dart';
  import 'package:flutter/material.dart';
  import 'package:generp/Notifiers/financeProvider/RequestionListProvider.dart';
  import 'package:generp/Utils/app_colors.dart';
  import 'package:generp/Utils/commonWidgets.dart';
  import 'package:intl/intl.dart';
  import 'package:provider/provider.dart';

  import '../../Models/financeModels/addDirectPaymentResponse.dart';

  class Directpaymentrequesitionlist extends StatefulWidget {
    final String pageTitleName;

    const Directpaymentrequesitionlist({super.key, required this.pageTitleName});

    @override
    State<Directpaymentrequesitionlist> createState() =>
        _DirectpaymentrequesitionlistState();
  }

  class _DirectpaymentrequesitionlistState
      extends State<Directpaymentrequesitionlist> {
    @override
    void initState() {
      // TODO: implement initState
      super.initState();
      WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
        var provider = Provider.of<Requestionlistprovider>(
          context,
          listen: false,
        );
        provider.addDirectPaymentRequestionViewAPI(context);
      });
    }

    @override
    void dispose() {
      super.dispose();
    }

    Future<bool> _onBackPressed(BuildContext context) async {
      Navigator.pop(context, true);
      return true;
    }

    @override
    Widget build(BuildContext context) {
      return Consumer<Requestionlistprovider>(
        builder: (context, provider, child) {
          return WillPopScope(
            child: Scaffold(
              backgroundColor: AppColors.white,
              appBar: appbar(context, "${widget.pageTitleName}"),
              body: Container(
                padding: EdgeInsets.symmetric(horizontal: 10),
                decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.circular(20),
                ),
                child: SingleChildScrollView(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      TextWidget(context, "Account"),
                      DropdownButtonHideUnderline(
                        child: Row(
                          children: [
                            Expanded(
                              child: DropdownButton2<DirectAccounts>(
                                isExpanded: true,
                                hint: Text(
                                  'Select Account Type',
                                  style: TextStyle(fontSize: 14),
                                  overflow: TextOverflow.ellipsis,
                                ),
                                items:
                                    provider.directAccounts
                                        .map(
                                          (accs) =>
                                              DropdownMenuItem<DirectAccounts>(
                                                value: accs,
                                                child: Text(
                                                  accs.name ?? '',
                                                  style: const TextStyle(
                                                    fontSize: 14,
                                                  ),
                                                  overflow: TextOverflow.ellipsis,
                                                ),
                                              ),
                                        )
                                        .toList(),
                                value: provider.selectDirectAccounts,
                                onChanged: (DirectAccounts? value) {
                                  if (value != null) {
                                    if (provider.directAccounts.isNotEmpty) {
                                      provider.selectDirectAccounts = value;
                                      print(
                                        "Selected Complaint Type: ${value.name}, ID: ${value.id}",
                                      );
                                      provider.directAccountId = value.id!;
                                      provider.directAccountValue = value.name!;
                                      print(
                                        "hfjkshfg" +
                                            provider.directAccountId.toString(),
                                      );
                                    }
                                  }
                                },
                                buttonStyleData: ButtonStyleData(
                                  height: 50,
                                  width: 160,
                                  padding: const EdgeInsets.only(
                                    left: 14,
                                    right: 14,
                                  ),
                                  decoration: BoxDecoration(
                                    borderRadius: BorderRadius.circular(14),
                                    color: AppColors.text_field_color,
                                  ),
                                ),
                                iconStyleData: const IconStyleData(
                                  icon: Icon(Icons.keyboard_arrow_down),
                                  iconSize: 12,
                                  iconEnabledColor: Color(0xFF2D2D2D),
                                  iconDisabledColor: Colors.grey,
                                ),
                                dropdownStyleData: DropdownStyleData(
                                  maxHeight: 200,
                                  decoration: BoxDecoration(
                                    borderRadius: BorderRadius.circular(14),
                                    color: AppColors.text_field_color,
                                  ),
                                  scrollbarTheme: ScrollbarThemeData(
                                    radius: const Radius.circular(15),
                                    thickness: MaterialStateProperty.all<double>(
                                      6,
                                    ),
                                    thumbVisibility:
                                        MaterialStateProperty.all<bool>(true),
                                  ),
                                ),
                                menuItemStyleData: const MenuItemStyleData(
                                  height: 40,
                                  padding: EdgeInsets.only(left: 14, right: 14),
                                ),
                              ),
                            ),
                          ],
                        ),
                      ),

                      TextWidget(context, "Payment Account"),
                      DropdownButtonHideUnderline(
                        child: Row(
                          children: [
                            Expanded(
                              child: DropdownButton2<DirectPaymentAccounts>(
                                isExpanded: true,
                                hint: Text(
                                  'Select Account Type',
                                  style: TextStyle(fontSize: 14),
                                  overflow: TextOverflow.ellipsis,
                                ),
                                items:
                                    provider.directPaymentAccounts
                                        .map(
                                          (accs) => DropdownMenuItem<
                                            DirectPaymentAccounts
                                          >(
                                            value: accs,
                                            child: Text(
                                              accs.name ?? '',
                                              style: const TextStyle(
                                                fontSize: 14,
                                              ),
                                              overflow: TextOverflow.ellipsis,
                                            ),
                                          ),
                                        )
                                        .toList(),
                                value: provider.selectDirectPaymentAccounts,
                                onChanged: (DirectPaymentAccounts? value) {
                                  if (value != null) {
                                    if (provider
                                        .directPaymentAccounts
                                        .isNotEmpty) {
                                      provider.selectDirectPaymentAccounts =
                                          value;
                                      print(
                                        "Selected Complaint Type: ${value.name}, ID: ${value.id}",
                                      );
                                      provider.directPaymentAccountsID =
                                          value.id!;
                                      provider.directPaymentAccountsValue =
                                          value.name!;
                                      print(
                                        "hfjkshfg" +
                                            provider.directPaymentAccountsID
                                                .toString(),
                                      );
                                    }
                                  }
                                },
                                buttonStyleData: ButtonStyleData(
                                  height: 50,
                                  width: 160,
                                  padding: const EdgeInsets.only(
                                    left: 14,
                                    right: 14,
                                  ),
                                  decoration: BoxDecoration(
                                    borderRadius: BorderRadius.circular(14),
                                    color: AppColors.text_field_color,
                                  ),
                                ),
                                iconStyleData: const IconStyleData(
                                  icon: Icon(Icons.keyboard_arrow_down),
                                  iconSize: 12,
                                  iconEnabledColor: Color(0xFF2D2D2D),
                                  iconDisabledColor: Colors.grey,
                                ),
                                dropdownStyleData: DropdownStyleData(
                                  maxHeight: 200,
                                  decoration: BoxDecoration(
                                    borderRadius: BorderRadius.circular(14),
                                    color: AppColors.text_field_color,
                                  ),
                                  scrollbarTheme: ScrollbarThemeData(
                                    radius: const Radius.circular(15),
                                    thickness: MaterialStateProperty.all<double>(
                                      6,
                                    ),
                                    thumbVisibility:
                                        MaterialStateProperty.all<bool>(true),
                                  ),
                                ),
                                menuItemStyleData: const MenuItemStyleData(
                                  height: 40,
                                  padding: EdgeInsets.only(left: 14, right: 14),
                                ),
                              ),
                            ),
                          ],
                        ),
                      ),

                      textControllerWidget(
                        context,
                        provider.amountController,
                        "Enter Amount",
                        provider.updateAmount,
                      ),

                      ///payment date toBE
                      TextWidget(context, "Enter Date"),
                      Row(
                        crossAxisAlignment: CrossAxisAlignment.center,
                        children: [
                          Expanded(
                            child: InkResponse(
                              onTap: () async {
                                provider.showDatePickerDialog(context);
                              },
                              child: Container(
                                padding: EdgeInsets.only(left: 10),
                                height:48,
                                alignment: Alignment.centerLeft,
                                decoration: BoxDecoration(
                                  borderRadius: BorderRadius.circular(14),
                                  color: AppColors.text_field_color
                                ),
                                child: Text(
                                  '${provider.formattedDate ?? 'Select Date'}',
                                  style: TextStyle(
                                    fontSize: 14,
                                    fontFamily:
                                    "JakartaMedium",
                                    color: AppColors.semi_black,
                                  ),
                                ),
                              ),
                            ),
                          ),
                        ],
                      ),
                      TextWidget(context, "Select Payment Mode"),
                      DropdownButtonHideUnderline(
                        child: Row(
                          children: [
                            Expanded(
                              child: DropdownButton2<DirectPaymentModes>(
                                isExpanded: true,
                                hint: Text(
                                  'Select Payment mode',
                                  style: TextStyle(fontSize: 14),
                                  overflow: TextOverflow.ellipsis,
                                ),
                                items:
                                    provider.directPaymentModes
                                        .map(
                                          (paymenents) => DropdownMenuItem<
                                            DirectPaymentModes
                                          >(
                                            value: paymenents,
                                            child: Text(
                                              paymenents.name ?? '',
                                              style: const TextStyle(
                                                fontSize: 14,
                                              ),
                                              overflow: TextOverflow.ellipsis,
                                            ),
                                          ),
                                        )
                                        .toList(),
                                value: provider.selectDirectPaymentModes,
                                onChanged: (DirectPaymentModes? value) {
                                  if (value != null) {
                                    if (provider.directPaymentModes.isNotEmpty) {
                                      provider.selectDirectPaymentModes = value;
                                      print(
                                        "Selected Complaint Type: ${value.name}, ID: ${value.id}",
                                      );
                                      provider.directPaymentModesID = value.id!;
                                      provider.directPaymentModesValues =
                                          value.name!;
                                      print(
                                        "hfjkshfg" +
                                            provider.directPaymentModesID
                                                .toString(),
                                      );
                                    }
                                  }
                                },
                                buttonStyleData: ButtonStyleData(
                                  height: 50,
                                  width: 160,
                                  padding: const EdgeInsets.only(
                                    left: 14,
                                    right: 14,
                                  ),
                                  decoration: BoxDecoration(
                                    borderRadius: BorderRadius.circular(14),
                                    color: AppColors.text_field_color,
                                  ),
                                ),
                                iconStyleData: const IconStyleData(
                                  icon: Icon(Icons.keyboard_arrow_down),
                                  iconSize: 12,
                                  iconEnabledColor: Color(0xFF2D2D2D),
                                  iconDisabledColor: Colors.grey,
                                ),
                                dropdownStyleData: DropdownStyleData(
                                  maxHeight: 200,
                                  decoration: BoxDecoration(
                                    borderRadius: BorderRadius.circular(14),
                                    color: AppColors.text_field_color,
                                  ),
                                  scrollbarTheme: ScrollbarThemeData(
                                    radius: const Radius.circular(15),
                                    thickness: MaterialStateProperty.all<double>(
                                      6,
                                    ),
                                    thumbVisibility:
                                        MaterialStateProperty.all<bool>(true),
                                  ),
                                ),
                                menuItemStyleData: const MenuItemStyleData(
                                  height: 40,
                                  padding: EdgeInsets.only(left: 14, right: 14),
                                ),
                              ),
                            ),
                          ],
                        ),
                      ),

                      if ([
                        "Cheque",
                        "RTGS",
                        "IMPS",
                        "NEFT",
                      ].contains(provider.paymentModeValue)) ...
                      [
                        textControllerWidget(
                          context,
                          provider.bankNameController,
                          "Enter Bank Name",
                          provider.updateBankName,
                        ),

                        textControllerWidget(
                          context,
                          provider.bankBranchController,
                          "Enter Bank Branch",
                          provider.updateBankBranch,
                        ),

                        textControllerWidget(
                          context,
                          provider.bankAccNumberController,
                          "Enter Account Number",
                          provider.updateNumber,
                        ),

                        textControllerWidget(
                          context,
                          provider.bankIfscController,
                          "Enter Bank IFSC",
                          provider.updateIFSC,
                        ),

                        textControllerWidget(
                          context,
                          provider.bankAcHolderController,
                          "Enter Bank Account Holder Name",
                          provider.updateHolder,
                        ),
                      ] else if (provider.paymentModeValue == "UPI") ...
                      [
                        textControllerWidget(
                          context,
                          provider.amountController,
                          "Enter UPI ID",
                          provider.updateUPI,
                        ),
                      ],
                      textControllerWidget(
                        context,
                        provider.paymentReferenceController,
                        "Enter Payment Reference Number",
                        provider.updateDescription,
                      ),

                      textControllerWidget(
                        context,
                        provider.descController,
                        "Enter Description",
                        provider.updateDescription,
                      ),
                      InkResponse(
                        onTap: () {
                          _showAttachmentSheet(context);
                        },
                        child: Container(
                          margin: EdgeInsets.symmetric(vertical: 10),
                          height: 45,
                          width: MediaQuery.of(context).size.width,
                          decoration: BoxDecoration(
                            color: Color(0xFFE6F6FF),
                            borderRadius: BorderRadius.circular(12),
                            border: Border.all(
                              color: AppColors.app_blue,
                              width: 0.5,
                            ),
                          ),
                          child: Center(
                            child: Text(
                              "File Attachment",
                              style: TextStyle(
                                fontFamily: "JakartaMedium",
                                color: AppColors.app_blue,
                              ),
                            ),
                          ),
                        ),
                      ),
                    ],
                  ),
                ),
              ),
              floatingActionButtonLocation:
                  FloatingActionButtonLocation.centerFloat,
              bottomNavigationBar: InkResponse(
                onTap: () {
                  // provider.submitClicked = true;
                  provider.addDirectPaymentRequestionSubmitAPI(context, provider.formattedDate);
                },
                child: Container(
                  height: 45,
                  alignment: Alignment.center,
                  margin: EdgeInsets.symmetric(horizontal: 10),
                  padding: EdgeInsets.symmetric(horizontal: 10, vertical: 5),
                  decoration: BoxDecoration(
                    color: AppColors.app_blue,
                    borderRadius: BorderRadius.circular(15),
                  ),
                  child: Text(
                    "Submit",
                    style: TextStyle(
                      fontSize: 15,
                      fontFamily: "JakartaMedium",
                      color: Colors.white,
                    ),
                  ),
                ),
              ),
            ),
            onWillPop: () {
              provider.resetForm();
              return onBackPressed(context);
            },
          );
        },
      );
    }
    void _showDialog(Widget child) {
      showCupertinoModalPopup<void>(
        context: context,
        builder: (BuildContext context) => Container(
          height: 216,
          padding: const EdgeInsets.only(top: 6.0),
          // The Bottom margin is provided to align the popup above the system
          // navigation bar.
          margin: EdgeInsets.only(
            bottom: MediaQuery.of(context).viewInsets.bottom,
          ),
          // Provide a background color for the popup.
          color: CupertinoColors.systemBackground.resolveFrom(context),
          // Use a SafeArea widget to avoid system overlaps.
          child: SafeArea(
            top: false,
            child: Column(
              children: [
                Expanded(
                  flex: 1,
                  child: SizedBox(
                    height: 40,
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        // Add a Cancel button (optional)
                        CupertinoButton(
                          child: Text(
                            'Cancel',
                            style: TextStyle(fontFamily: "JakartaMedium"),
                          ),
                          onPressed: () {
                            Navigator.pop(context);
                          },
                        ),
                        // Add a Done button
                        CupertinoButton(
                          child: Text('Done',
                              style: TextStyle(fontFamily: "JakartaMedium")),
                          onPressed: () {
                            Navigator.pop(context); // Dismiss the dialog
                          },
                        ),
                      ],
                    ),
                  ),
                ),
                Expanded(flex: 3, child: child),
              ],
            ),
          ),
        ),
      );
    }
    Widget TextWidget(context, text) {
      return Padding(
        padding: const EdgeInsets.only(bottom: 5.0, top: 8.0),
        child: Text(text),
      );
    }

    Widget ErrorWidget(context, text) {
      if (text != null)
        return Text(text!, style: TextStyle(color: Colors.red, fontSize: 12));
      else
        return SizedBox(height: 10);
    }

    Widget textControllerWidget(
      context,
      controller,
      hintText,
      Function(String)? onChanged,
    ) {
      return Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Padding(
            padding: const EdgeInsets.only(bottom: 5.0, top: 8.0),
            child: Text(hintText),
          ),
          Container(
            height: hintText == "Enter Description" ? 150 : 50,
            alignment: Alignment.center,
            decoration: BoxDecoration(
              color: AppColors.text_field_color,
              borderRadius: BorderRadius.circular(14),
            ),
            child: Padding(
              padding: const EdgeInsets.fromLTRB(10.0, 0.0, 10, 0),
              child: TextFormField(
                controller: controller,
                keyboardType: TextInputType.text,
                maxLines: hintText == "Enter Description" ? 60 : 1,
                onChanged: onChanged,
                decoration: InputDecoration(
                  hintText: hintText,
                  hintStyle: TextStyle(
                    fontWeight: FontWeight.w400,
                    color: Color(0xFFB4BEC0),
                    fontSize: 14,
                  ),

                  enabledBorder: InputBorder.none,
                  focusedBorder: InputBorder.none,
                ),
              ),
            ),
          ),
        ],
      );
    }

    Future<void> _showAttachmentSheet(BuildContext context) {
      return showModalBottomSheet(
        useSafeArea: true,
        isDismissible: true,
        isScrollControlled: true,
        showDragHandle: true,
        backgroundColor: Colors.white,
        enableDrag: true,
        context: context,
        builder: (context) {
          return StatefulBuilder(
            builder: (context, setState) {
              return SafeArea(
                child: Consumer<Requestionlistprovider>(
                  builder: (context, provider, child) {
                    return Padding(
                      padding: EdgeInsets.only(
                        bottom:
                            MediaQuery.of(
                              context,
                            ).viewInsets.bottom, // This handles keyboard
                      ),
                      child: Container(
                        margin: EdgeInsets.only(
                          bottom: 15,
                          left: 15,
                          right: 15,
                          top: 10,
                        ),

                        child: SingleChildScrollView(
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            mainAxisSize: MainAxisSize.min,
                            children: [
                              Align(
                                alignment: Alignment.center,
                                child: Text(
                                  "Select Source",
                                  style: TextStyle(
                                    color: AppColors.app_blue,
                                    fontFamily: "JakrtaMedium",
                                    fontSize: 16,
                                  ),
                                ),
                              ),
                              SizedBox(height: 15),
                              InkWell(
                                onTap: () {
                                  Navigator.of(context).pop(false);
                                  provider.imgFromGallery(context);
                                },
                                child: Container(
                                  height: 35,
                                  child: Text("Select photo from gallery"),
                                ),
                              ),
                              SizedBox(height: 10),
                              InkWell(
                                onTap: () {
                                  Navigator.of(context).pop(false);
                                  provider.imgFromCamera(context);
                                },
                                child: Container(
                                  height: 35,
                                  child: Text("Capture photo from camera"),
                                ),
                              ),
                            ],
                          ),
                        ),
                      ),
                    );
                  },
                ),
              );
            },
          );
        },
      );
    }
  }
