import 'dart:convert';

import 'package:dio/dio.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:huixiang/generated/l10n.dart';
import 'package:huixiang/retrofit/data/base_data.dart';
import 'package:huixiang/retrofit/data/coupon.dart';
import 'package:huixiang/retrofit/data/page.dart';
import 'package:huixiang/retrofit/retrofit_api.dart';
import 'package:huixiang/utils/font_weight.dart';
import 'package:huixiang/view_widget/classic_header.dart';
import 'package:huixiang/view_widget/coupon_details_dialog.dart';
import 'package:huixiang/view_widget/my_appbar.dart';
import 'package:huixiang/view_widget/my_footer.dart';
import 'package:huixiang/view_widget/new_coupon_widget.dart';
import 'package:huixiang/view_widget/no_data_view.dart';
import 'package:huixiang/view_widget/receive_success.dart';
import 'package:huixiang/view_widget/selector_store_dialog.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:shimmer/shimmer.dart';

class CouponPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _CouponPage();
  }
}

class _CouponPage extends State<CouponPage> {
  ApiService apiService;
  RefreshController _refreshController;
  int networkStatus = 0;

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

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

    SharedPreferences.getInstance().then((value) {
      apiService =
          ApiService(Dio(), context: context, token: value.getString('token'));
      queryCard();
    });
    _refreshController = RefreshController(initialRefresh: false);
  }

  List<Coupon> coupons = [];
  int pageNum = 1;
  int state = 1;

  _onRefresh() async {
    pageNum = 1;
    queryCard();
  }

  queryCard() async {
    BaseData<PageInfo<Coupon>> baseData = await apiService.queryCard({
      "centre": true,
      "pageNum": pageNum,
      "pageSize": 10,
      "searchKey": "",
      "state": state
    }).catchError((error) {
      networkStatus = -1;
      _refreshController.loadFailed();
      _refreshController.refreshFailed();
    });
    if (baseData != null && baseData.isSuccess) {
      if (pageNum == 1) {
        coupons.clear();
      }
      coupons.addAll(baseData.data.list);
      setState(() {
        _refreshController.refreshCompleted();
        _refreshController.loadComplete();
        if (baseData.data.pageNum == baseData.data.pages) {
          _refreshController.loadNoData();
        } else {
          pageNum += 1;
        }
      });
      networkStatus = 1;
    } else {
      _refreshController.loadFailed();
      _refreshController.refreshFailed();
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: MyAppBar(
        title: S
            .of(context)
            .youhuiquan,
        titleColor: Colors.black,
        background: Color(0xFFFFFFFF),
        leadingColor: Colors.black,
      ),
      body: Column(
        children: [
          Container(
            height: 54.h,
            padding: EdgeInsets.only(left: 14.w, right: 14.w, bottom: 12.h),
            margin: EdgeInsets.only(bottom: 10),
            color: Color(0xFFFFFFFF),
            child: Row(
              children: [
                Expanded(
                    child: GestureDetector(
                      onTap: () {
                        setState(() {
                          state = 1;
                          _onRefresh();
                        });
                      },
                      child: Container(
                        width: double.infinity,
                        alignment: Alignment.center,
                        decoration: BoxDecoration(
                          borderRadius: new BorderRadius.only(
                            topLeft: Radius.circular(6),
                            bottomLeft: Radius.circular(6),
                          ),
                          border: Border.all(
                            color: Color(0xFF32A060),
                            width: 1,
                          ),
                          color: state == 1 ? Color(0xFF32A060) : Color(
                              0xFFFFFFFF),
                        ),
                        child: Text(
                          S
                              .of(context)
                              .keyongquan,
                          style: TextStyle(
                            fontWeight: MyFontWeight.medium,
                            fontSize: 15.sp,
                            color: state == 1 ? Color(0xFFFFFFFF) : Color(
                                0xFF32A060),
                          ),
                        ),
                      ),
                    )),
                Expanded(
                    child: GestureDetector(
                      onTap: () {
                        setState(() {
                          state = 2;
                          _onRefresh();
                        });
                      },
                      child: Container(
                        width: double.infinity,
                        alignment: Alignment.center,
                        decoration: BoxDecoration(
                          border: Border(
                            top: BorderSide(width: 1, color: Color(0xFF32A060)),
                            bottom: BorderSide(width:1, color: Color(0xFF32A060)),
                          ),
                          color: state == 2 ? Color(0xFF32A060) : Color(
                              0xFFFFFFFF),
                        ),
                        child: Text(
                          S.of(context).yishiyong,
                          style: TextStyle(
                            fontWeight: MyFontWeight.medium,
                            fontSize: 15.sp,
                            color: state ==2 ? Color(0xFFFFFFFF) : Color(
                                0xFF32A060),
                          ),
                        ),
                      ),
                    )),
                Expanded(
                    child: GestureDetector(
                      onTap: () {
                        setState(() {
                          state = 3;
                          _onRefresh();
                        });
                      },
                      child: Container(
                        width: double.infinity,
                        alignment: Alignment.center,
                        decoration: BoxDecoration(
                          borderRadius: new BorderRadius.only(
                            topRight: Radius.circular(6),
                            bottomRight: Radius.circular(6),
                          ),
                          border: Border.all(
                            color: Color(0xFF32A060),
                            width: 1,
                          ),
                          color: state == 3 ? Color(0xFF32A060) : Color(
                              0xFFFFFFFF),
                        ),
                        child: Text(
                          S.of(context).shixiaoquan,
                          style: TextStyle(
                            fontWeight: MyFontWeight.medium,
                            fontSize: 15.sp,
                            color: state == 3 ? Color(0xFFFFFFFF) : Color(
                                0xFF32A060),
                          ),
                        ),
                      ),
                    ))
              ],
            ),
          ),
          Expanded(
            child: SmartRefresher(
              controller: _refreshController,
              enablePullDown: true,
              enablePullUp: true,
              physics: BouncingScrollPhysics(),
              header: MyHeader(),
              footer: CustomFooter(
                builder: (context, mode) {
                  return MyFooter(mode);
                },
              ),
              onRefresh: _onRefresh,
              onLoading: queryCard,
              child: networkStatus == 0 ? ListView.builder(
                itemCount: 10,
                physics: BouncingScrollPhysics(),
                shrinkWrap: true,
                itemBuilder: (context, position) {
                  return GestureDetector(
                    onTap: () {},
                    child: couponItemSm(),
                  );
                },
              ):((coupons != null && coupons.length > 0)
                  ? ListView.builder(
                itemBuilder: (context, position) {
                  return GestureDetector(
                    child: NewCouponWidget(
                      coupons[position],
                          (type) {
                        if (type == 1) {
                          receiveCoupon(coupons[position].id);
                        } else {
                          if (coupons[position].bizType == 5 ||
                              coupons[position].bizType == 3) {
                            Navigator.of(context).pushNamed(
                                '/router/write_off_page',
                                arguments: {
                                  "couponId": coupons[position].id,
                                  "coupon": coupons[position],
                                }).then((value) {
                              _onRefresh();
                            });
                          } else {
                            showStoreSelector(
                                coupons[position].storeList);

                          }
                        }
                      },
                          () {
                        setState(() {
                          coupons[position].isEx =
                          !coupons[position].isEx;
                        });
                      },
                      (){
                        setState(() {
                          showCouponDetails(position);
                        });
                      },
                      type: 0,
                    ),
                  );
                },
                itemCount: coupons != null ? coupons.length : 0,
              )
                  : NoDataView(
                src: "assets/image/ka.webp",
                isShowBtn: false,
                text: state == 1 ? "目前暂无优惠券,请到领劵中心领取哦~" :(state == 2 ? "目前暂无已使用的优惠券哦~" :"目前暂无失效的优惠券哦~"),
                fontSize: 16.sp,
                margin: EdgeInsets.only(top: 120.h, left: 60, right: 60),
              )),
            ),
          ),
        ],
      ),
    );
  }

  receiveCoupon(couponId) async {
    BaseData baseData =
    await apiService.receiveCoupon(couponId).catchError((onError) {});
    if (baseData != null && baseData.isSuccess) {
      _onRefresh();
      showAlertDialog();
    }
  }

  ///选择店铺使用
  showStoreSelector(storeList) {
    showModalBottomSheet(
        context: context,
        backgroundColor: Colors.transparent,
        builder: (context) {
          return SelectorStoreWidget(storeList);
        });
  }

  showAlertDialog() {
    //显示对话框
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return ReceiveSuccess();
      },
    );
  }

  ///使用详情
  showCouponDetails(index) {
    showModalBottomSheet(
        context: context,
        backgroundColor: Colors.transparent,
        builder: (context) {
          return CouponDetailsWidget(coupons[index]);
        });
  }

  Widget couponItemSm(){
    return Container(
      height:143.h,
      width: double.infinity,
      margin: EdgeInsets.fromLTRB(14.w, 6.h, 14.w, 6.h),
      padding: EdgeInsets.only(right:13.w,top: 12.h,bottom: 13.h,left: 18.w),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(6),
        boxShadow: [
          BoxShadow(
            color: Colors.black.withAlpha(12),
            offset: Offset(0, 3),
            blurRadius: 14,
            spreadRadius: 0,
          )
        ],
      ),
      child:Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        mainAxisAlignment: MainAxisAlignment.start,
        children: [
          Expanded(child:Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            mainAxisAlignment: MainAxisAlignment.start,
            children: [
              Shimmer.fromColors(
                baseColor: Color(0XFFD8D8D8),
                highlightColor: Color(0XFFD8D8D8),
                child: Container(
                  color: Color(0XFFD8D8D8),
                  width:143.w,
                  height: 21.h,
                ),
              ),
              SizedBox(height: 6.h,),
              Shimmer.fromColors(
                baseColor: Color(0XFFD8D8D8),
                highlightColor: Color(0XFFD8D8D8),
                child: Container(
                  color: Color(0XFFD8D8D8),
                  width:150.w,
                  height:17.h,
                ),
              ),
              Spacer(),
              Shimmer.fromColors(
                baseColor: Color(0XFFD8D8D8),
                highlightColor: Color(0XFFD8D8D8),
                child: Container(
                  color: Color(0XFFD8D8D8),
                  width:48.w,
                  height: 17.h,
                ),
              ),
            ],
          )),
          Column(
            children: [
              Shimmer.fromColors(
                baseColor: Color(0XFFD8D8D8),
                highlightColor: Color(0XFFD8D8D8),
                child: Container(
                  color: Color(0XFFD8D8D8),
                  width:50.w,
                  height: 50.h,
                ),
              ),
              SizedBox(height: 10.h,),
              Shimmer.fromColors(
                baseColor: Color(0XFFD8D8D8),
                highlightColor: Color(0XFFD8D8D8),
                child: Container(
                  color: Color(0XFFD8D8D8),
                  width:59.w,
                  height:17.h,
                ),
              ),
              SizedBox(height:15.h,),
              Shimmer.fromColors(
                baseColor: Color(0XFFD8D8D8),
                highlightColor: Color(0XFFD8D8D8),
                child: Container(
                  decoration: BoxDecoration(
                    color: Color(0XFFD8D8D8),
                    borderRadius: BorderRadius.circular(10),
                  ),
                  width:64.w,
                  height: 19.h,
                ),
              )
            ],
          )
        ],
      ),
    );
  }

}