import 'dart:io';

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:fluwx/fluwx.dart';
import 'package:huixiang/generated/l10n.dart';
import 'package:huixiang/retrofit/data/base_data.dart';
import 'package:huixiang/retrofit/data/recharge_list.dart';
import 'package:huixiang/retrofit/data/user_info.dart';
import 'package:huixiang/retrofit/data/vip_benefit_list.dart';
import 'package:huixiang/retrofit/data/vip_rule_details.dart';
import 'package:huixiang/retrofit/data/wx_pay.dart';
import 'package:huixiang/retrofit/retrofit_api.dart';
import 'package:huixiang/utils/flutter_utils.dart';
import 'package:huixiang/utils/font_weight.dart';
import 'package:huixiang/utils/min.dart';
import 'package:huixiang/view_widget/item_input_widget.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:huixiang/view_widget/my_appbar.dart';
import 'package:huixiang/view_widget/recharge_details_dialog.dart';
import 'package:huixiang/view_widget/round_button.dart';
import 'package:shared_preferences/shared_preferences.dart';

class RechargePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _RechargePage();
  }
}

class _RechargePage extends State<RechargePage> {
  ApiService apiService;
  TextEditingController controller = TextEditingController();
  VipRuleDetails vipRuleDetails;
  List<VipBenefitList> vipBenefitList = [];
  Color color = Colors.black;
  double discount = 100;
  List<RechargeList> rechargeA;
  int selectIndex = 0;
  UserInfo userInfo;
  String mBalance = "0";
  dynamic payListen;

  @override
  void initState() {
    super.initState();

    SharedPreferences.getInstance().then((value) {
      apiService = ApiService(Dio(),
          context: context, token: value.getString("token"), pay: true);
      queryBenefitList();
      queryRuleDetails();
      queryRechargeList();
      queryUserBalance();
    });
    payListen = weChatResponseEventHandler.listen((event) async {
      print("payCallback: ${event.errCode}");
      if (event.errCode == 0) {
        queryUserBalance();
        SmartDialog.showToast("充值成功", alignment: Alignment.center);
      }
      else{
        SmartDialog.showToast("充值失败", alignment: Alignment.center);
        return;
      }
    });
  }

  @override
  void dispose() {
    super.dispose();
    if(payListen!=null)
      payListen.cancel();
  }

  ///会员权益列表
  queryBenefitList() async {
    BaseData<List<VipBenefitList>> baseData =
        await apiService.benefitList().catchError((onError) {});
    if (baseData != null && baseData.isSuccess) {
      setState(() {
        vipBenefitList.clear();
        vipBenefitList.addAll(baseData.data);
        vipBenefitList.forEach((element) {
          if (element.have &&
              element.config != null &&
              element.code == "RECHARGE") {
            discount = double.parse(element.config);
          }
        });
      });
    }
    EasyLoading.dismiss();
  }

  queryUserBalance() async {
    BaseData<UserInfo> baseData =
        await apiService.queryInfo().catchError((onError) {});
    if (baseData != null && baseData.isSuccess) {
      userInfo = baseData.data;
      mBalance = userInfo?.money ?? "0";
      if (mounted) setState(() {});
    }
  }

  ///会员权益介绍/规则/说明/储值说明
  queryRuleDetails() async {
    BaseData<VipRuleDetails> baseData =
        await apiService.vipBenefit().catchError((onError) {});
    if (baseData != null && baseData.isSuccess) {
      setState(() {
        vipRuleDetails = baseData.data;
      });
    }
    EasyLoading.dismiss();
  }

  ///充值列表
  queryRechargeList() async {
    if (apiService == null) {
      SharedPreferences value = await SharedPreferences.getInstance();
      apiService = ApiService(
        Dio(),
        context: context,
        token: value.getString("token"),
      );
    }
    BaseData<List<RechargeList>> baseData =
        await apiService.rechargeAct().catchError((onError) {});
    if (baseData != null && baseData.isSuccess) {
      setState(() {
        rechargeA = baseData.data;
      });
    }
    EasyLoading.dismiss();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: MyAppBar(
        title: S.of(context).chongzhi,
        titleColor: Colors.black,
        titleSize: 18.sp,
        background: Color(0xFFFFFFFF),
        leadingColor: Colors.black,
      ),
      body: Container(
        color: Color(0xFFFFFFFF),
        child: SingleChildScrollView(
          child: Container(
            child: Stack(
              children: [
                Column(
                  children: [
                    SingleChildScrollView(
                      physics: BouncingScrollPhysics(),
                      child: Container(
                        child: Column(
                          children: [
                            Container(
                                margin: EdgeInsets.only(left: 16, right: 16),
                                child: Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  mainAxisAlignment: MainAxisAlignment.start,
                                  children: [
                                    // ItemInputWidget(
                                    //   S.of(context).qingshuruchongzhijine,
                                    //   hintText: "",
                                    //   controller: controller,
                                    //   padding: EdgeInsets.all(20),
                                    //   errorText: S.of(context).chongzhizuixiaojine(100),
                                    //   titleColor: Color(0xFF727272),
                                    //   errorTextColor: Color(0xFF32A060),
                                    //   radius: 8,
                                    //   discount: discount / 10,
                                    //   style: TextStyle(
                                    //     fontWeight: FontWeight.bold,
                                    //     fontSize: 27.sp,
                                    //     color: color,
                                    //   ),
                                    //   inputLimit: 6,
                                    //   textInputType: TextInputType.number,
                                    //   textInputFormatter:
                                    //       FilteringTextInputFormatter.digitsOnly,
                                    //   onChanged: (value) {
                                    //     if (value != null &&
                                    //         value != "" &&
                                    //         double.tryParse(value) < 100) {
                                    //       color = Colors.red;
                                    //     } else {
                                    //       color = Colors.black;
                                    //     }
                                    //     setState(() {});
                                    //   },
                                    // ),
                                    SizedBox(
                                      height: 20,
                                    ),
                                    Row(
                                      children: [
                                        Expanded(
                                            child: Text(
                                          S.of(context).zhanghuyue,
                                          style: TextStyle(
                                              fontSize: 15.sp,
                                              color: Color(0xFF181818),
                                              fontWeight:
                                                  MyFontWeight.semi_bold),
                                        )),
                                        Text.rich(
                                          TextSpan(children: [
                                            TextSpan(
                                              text: "$mBalance",
                                              style: TextStyle(
                                                  fontSize: 26.sp,
                                                  color: Color(0xFF181818),
                                                  fontWeight:
                                                      MyFontWeight.semi_bold),
                                            ),
                                            TextSpan(
                                              text: "元",
                                              style: TextStyle(
                                                  fontSize: 15.sp,
                                                  color: Color(0xFF181818),
                                                  fontWeight:
                                                      MyFontWeight.semi_bold),
                                            ),
                                          ]),
                                        ),
                                      ],
                                    ),
                                    SizedBox(height: 28),
                                    rechargeList(),
                                    // Row(
                                    //   crossAxisAlignment: CrossAxisAlignment.start,
                                    //   mainAxisAlignment: MainAxisAlignment.spaceAround,
                                    //   children: [
                                    //     if (vipRuleDetails?.recharge != null &&
                                    //         vipRuleDetails.recharge != "")
                                    //       Expanded(
                                    //         child: Container(
                                    //           color: Colors.white,
                                    //           child: Html(
                                    //             data: "注意:${vipRuleDetails?.recharge ?? ""}",
                                    //             customImageRenders: {
                                    //               networkSourceMatcher(): networkImageRender(
                                    //                 loadingWidget: () {
                                    //                   return Container();
                                    //                 },
                                    //               ),
                                    //             },
                                    //           ),
                                    //         ),
                                    //       )
                                    //   ],
                                    // ),
                                  ],
                                )),
                            Container(
                              width: double.infinity,
                              margin: EdgeInsets.only(
                                  bottom: 22.h, left: 16, right: 16),
                              padding: EdgeInsets.only(
                                top: 20.h,
                                bottom: 20.h,
                              ),
                              // decoration: BoxDecoration(
                              //   color: Colors.white,
                              //   borderRadius: BorderRadius.circular(4),
                              // ),
                              child: Column(
                                mainAxisAlignment:
                                    MainAxisAlignment.spaceAround,
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: [
                                  Padding(
                                    padding: EdgeInsets.only(bottom: 16.h),
                                    child: Text(
                                      S.of(context).zhifufangshi,
                                      style: TextStyle(
                                        fontSize: 16.sp,
                                        color: Colors.black,
                                        fontWeight: FontWeight.bold,
                                      ),
                                    ),
                                  ),
                                  GestureDetector(
                                    onTap: () {
                                      setState(() {
                                        checkIndex = 1;
                                      });
                                    },
                                    child: Row(
                                      mainAxisAlignment:
                                          MainAxisAlignment.start,
                                      crossAxisAlignment:
                                          CrossAxisAlignment.start,
                                      children: [
                                        Image.asset(
                                            "assets/image/icon_we_chat.webp"),
                                        Expanded(
                                          flex: 1,
                                          child: Padding(
                                            padding: EdgeInsets.only(left: 8.w),
                                            child: Text(
                                              S.of(context).weixinzhifu,
                                              style: TextStyle(
                                                fontSize: 14.sp,
                                                color: Color(0xff353535),
                                              ),
                                            ),
                                          ),
                                        ),
                                        checkView(1),
                                      ],
                                    ),
                                  ),
                                ],
                              ),
                            ),
                            Align(
                              alignment: Alignment.bottomCenter,
                              child: GestureDetector(
                                onTap: () {
                                  recharge();
                                },
                                child: Container(
                                  height: 56.h,
                                  width: double.infinity,
                                  alignment: Alignment.center,
                                  decoration: BoxDecoration(
                                    color: Color(0xFF32A060),
                                    borderRadius: BorderRadius.circular(27),
                                  ),
                                  margin: EdgeInsets.only(
                                      left: 16, right: 16, bottom: 21),
                                  child: Text(
                                    S.of(context).querenchongzhi,
                                    style: TextStyle(
                                      fontSize: 16.sp,
                                      fontWeight: MyFontWeight.medium,
                                      color: Colors.white,
                                    ),
                                  ),
                                ),
                              ),

                              // Container(
                              //   height: 56.h,
                              //   color: Colors.white,
                              //   child: Row(
                              //     children: [
                              //       Expanded(child:Container(
                              //         padding:EdgeInsets.only(top: 7.h,left:16),
                              //           child:Column(
                              //         crossAxisAlignment: CrossAxisAlignment.start,
                              //         children: [
                              //           Row(
                              //             children: [
                              //               Text(
                              //                 S.of(context).heji,
                              //                 style: TextStyle(
                              //                   fontSize: 14.sp,
                              //                   fontWeight: MyFontWeight.regular,
                              //                   color: Colors.black,
                              //                 ),
                              //               ),
                              //               Text(
                              //                 controller.text,
                              //                 style: TextStyle(
                              //                   fontSize: 16.sp,
                              //                   fontWeight: MyFontWeight.medium,
                              //                   color: Color(0xFF32A060),
                              //                 ),
                              //               ),
                              //             ],
                              //           ),
                              //           if(controller.text != "")
                              //             Text.rich(
                              //               TextSpan(
                              //                 children: [
                              //                   TextSpan(
                              //                     text: "充值",
                              //                     style: TextStyle(
                              //                       fontSize:12.sp,
                              //                       fontWeight: MyFontWeight.regular,
                              //                       color: Color(0xFFADADAD),
                              //                     ),
                              //                   ),
                              //                   TextSpan(
                              //                     text:"¥${controller.text}",
                              //                     style: TextStyle(
                              //                       fontSize: 12.sp,
                              //                       fontWeight: MyFontWeight.regular,
                              //                       color:Color(0xff3541C9),
                              //                     ),
                              //                   ),
                              //                   TextSpan(
                              //                     text: "赠送",
                              //                     style: TextStyle(
                              //                       fontSize:12.sp,
                              //                       fontWeight: MyFontWeight.regular,
                              //                       color: Color(0xFFADADAD),
                              //                     ),
                              //                   ),
                              //                   TextSpan(
                              //                     text:"¥${((double.tryParse(controller.text)??0) - ((double.tryParse(controller.text)??0) * (discount/100))).toStringAsFixed(2)}",
                              //                     style: TextStyle(
                              //                       fontSize: 12.sp,
                              //                       fontWeight: MyFontWeight.regular,
                              //                       color: Color(0xff3541C9),
                              //                     ),
                              //                   ),TextSpan(
                              //                     text: "元",
                              //                     style: TextStyle(
                              //                       fontSize:12.sp,
                              //                       fontWeight: MyFontWeight.regular,
                              //                       color: Color(0xFFADADAD),
                              //                     ),
                              //                   ),
                              //                 ],
                              //               ),
                              //             ),
                              //         ],
                              //       ))
                              //       ),
                              //       GestureDetector(
                              //         onTap: () {
                              //           recharge();
                              //         },
                              //         child: RoundButton(
                              //           width: 103.w,
                              //           height: 54.h,
                              //           text: S.of(context).chongzhi,
                              //           textColor: Colors.white,
                              //           fontWeight: MyFontWeight.regular,
                              //           backgroup: Color(0xFF32A060),
                              //           radius: 0,
                              //           fontSize: 16.sp,
                              //           padding: EdgeInsets.symmetric(vertical: 5.h),
                              //         ),
                              //       ),
                              //     ],
                              //   ),
                              // )
                            )
                          ],
                        ),
                      ),
                    )
                  ],
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

  var checkIndex = 1;

  Widget rechargeList() {
    return ListView.builder(
      padding: EdgeInsets.zero,
      itemCount: rechargeA == null ? 0 : rechargeA.length,
      scrollDirection: Axis.vertical,
      shrinkWrap: true,
      physics: BouncingScrollPhysics(),
      itemBuilder: (context, position) {
        return GestureDetector(
            onTap: () {
              setState(() {
                selectIndex = position;
              });
            },
            child: rechargeItem(rechargeA[position], position));
      },
    );
  }

  Widget rechargeItem(RechargeList rechargeA, index) {
    return Container(
        width: double.infinity,
        height: 69.h,
        decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(4),
            border: Border.all(
              color: selectIndex == index ? Color(0xFF32A060) :Color(0xFFFAFAFA),
              width: selectIndex == index ? 1 :0,
            ),
            color: selectIndex == index ? Color(0XFFF0FAF4) :Color(0xFFFAFAFA)),
        margin: EdgeInsets.only(bottom: 14.w),
        padding: EdgeInsets.only(left: 16),
        child: Flex(
          direction: Axis.horizontal,
          children: [
            Expanded(
                flex: 1,
                child: Container(
                  child: Text.rich(
                    TextSpan(children: [
                      TextSpan(
                        text: "储值   ",
                        style: TextStyle(
                            fontSize: 12.sp,
                            color:selectIndex == index ? Color(0xFF4D4D4D):Color(0xFF868686),
                            fontWeight: MyFontWeight.regular),
                      ),
                      TextSpan(
                        text:
                        "${AppUtils.calculateDouble(double.tryParse(rechargeA.rechargeMoney) ?? 0)}元",
                        style: TextStyle(
                            fontSize: 18.sp,
                            color: selectIndex == index ? Color(0xFF353535) : Color(0xFF868686),
                            fontWeight: MyFontWeight.semi_bold),
                      ),
                    ]),
                  ),
                )),
            Container(
              width: 1.w,
              height: 37.h,
              color: selectIndex == index ? Color(0xFF32A060):Color(0xFF979797),
              margin: EdgeInsets.only(right: 16.w, left: 12),
            ),
        Expanded(
          flex: 2,
          child:Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text.rich(
                  TextSpan(children: [
                    TextSpan(
                      text: "实际到账 ",
                      style: TextStyle(
                          fontSize: 12.sp,
                          color: selectIndex == index ? Color(0xFF353535) : Color(0xFF868686),
                          fontWeight: MyFontWeight.regular),
                    ),
                    TextSpan(
                      text:
                          "${AppUtils.calculateDouble((double.tryParse(rechargeA.rechargeMoney) ?? 0) + (double.tryParse(rechargeA.giftdMoney) ?? 0) + ((double.tryParse(rechargeA.rechargeMoney) ?? 0) - ((double.tryParse(rechargeA.rechargeMoney) ?? 0) * (discount / 100))))}元",
                      style: TextStyle(
                          fontSize: 18.sp,
                          color: selectIndex == index ? Color(0xFF353535) : Color(0xFF868686),
                          fontWeight: MyFontWeight.semi_bold),
                    ),
                  ]),
                ),
                SizedBox(
                  height: 4.h,
                ),
                GestureDetector(
                  onTap: (){
                    setState(() {
                      if(selectIndex == index)
                        showRecharge(index);
                    });
                  },
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.start,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    children: [
                      Text(
                        "充值说明",
                        style: TextStyle(
                          color: selectIndex == index ?Color(0xFF4D4D4D) : Color(0xFF868686),
                          fontSize: 12.sp,
                          fontWeight: MyFontWeight.regular,
                        ),
                      ),
                      Icon(
                        Icons.chevron_right,
                        size: 20,
                        color: selectIndex == index ? Color(0xFF353535) : Color(0xFF868686),
                      ),
                    ],
                  )
                ),
              ],
            ))
          ],
        ));
  }

  Widget checkView(var index) {
    return Container(
      padding: EdgeInsets.only(right: 16.w),
      alignment: Alignment.center,
      child: Image.asset(
        checkIndex != index
            ? "assets/image/icon_radio_unselected.webp"
            : "assets/image/icon_radio_selected.webp",
        width: 15.w,
        height: 15.h,
      ),
    );
  }

  ///充值说明底部弹窗
  showRecharge(index) {
      showModalBottomSheet(
          context: context,
          backgroundColor: Colors.transparent,
          builder: (context) {
            return RechargeWidget(rechargeA[index]);
          });
    }

  recharge() async {
    // String money = controller.text;
    // if (money == null || money == "") {
    //   SmartDialog.showToast(S.of(context).qingshuruchongzhijine,
    //       alignment: Alignment.center);
    //   return;
    // }
    // int amount = int.tryParse(money);
    // if (checkIndex == 1) {
    //   if (amount < 100) {
    //     SmartDialog.showToast(S.of(context).chongzhizuixiaojine(100),
    //         alignment: Alignment.center);
    //     return;
    //   }

    if (Platform.isAndroid) {
      if (!(await Min.isInitialize())) {
        // 小程序的微信支付和app的充值支付使用同一个WXPayEntryActivity回调,
        // 然而充值时小程序未初始化会导致回调内部代码调用getPackage空指针,
        // 故而在此初始化一下
        await Min.initialize();
      }
    }

    BaseData<dynamic> baseData = await apiService.recharge({
      "amount": 0,
      "rechargeActId": rechargeA[selectIndex].id,
      "rechargeType": 2
    }).catchError((error) {});
    if (baseData != null && baseData.isSuccess) {
      WxPay wxPay = WxPay.fromJson(baseData.data);
      await registerWxApi(
        appId: wxPay.appId,
        doOnAndroid: true,
        universalLink: "https://hx.lotus-wallet.com/app/",
      );
      payWithWeChat(
        appId: wxPay.appId,
        partnerId: wxPay.partnerId,
        prepayId: wxPay.prepayId,
        packageValue: wxPay.packageValue,
        nonceStr: wxPay.nonceStr,
        timeStamp: int.tryParse(wxPay.timeStamp),
        sign: wxPay.sign,
      );
    } else {
      SmartDialog.showToast(baseData.msg, alignment: Alignment.center);
    }
  }
}