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';

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

class _CouponPage extends State<CouponPage> {
  ApiService apiService;
  RefreshController _refreshController;

  @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) {
      _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;
        }
      });
    } 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(
                          "已使用",
                          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: (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": jsonEncode(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]);
        });
  }

}