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/view_widget/classic_header.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 CouponsPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _CouponsPage();
  }
}

class _CouponsPage extends State<CouponsPage> {
  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(
      body: Column(
        children: [
          Row(
            children: [
              Container(
                width: 68.w,
                height: 26.h,
                alignment: Alignment.center,
                margin: EdgeInsets.only(
                    left: 16.w, right: 12.w, top: 10.h, bottom: 14.h,),
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(2),
                  color: state == 1 ? Colors.white : Color(0xffE5E5E5),
                ),
                child: GestureDetector(
                  onTap: () {
                    setState(() {
                      state = 1;
                      _onRefresh();
                    });
                  },
                  child: Text(
                    S.of(context).keyongquan,
                    style: TextStyle(
                      fontSize: 14.sp,
                      fontWeight:
                          state == 1 ? FontWeight.bold : FontWeight.normal,
                      color: state == 1 ? Colors.black : Color(0xff727272),
                    ),
                  ),
                ),
              ),
              Container(
                width: 68.w,
                height: 26.h,
                alignment: Alignment.center,
                margin: EdgeInsets.only(left: 16.w, top: 10.h, bottom: 14.h),
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(2),
                  color: state == 3 ? Colors.white : Color(0xffE5E5E5),
                ),
                child: GestureDetector(
                  onTap: () {
                    setState(() {
                      state = 3;
                      _onRefresh();
                    });
                  },
                  child: Text(
                    S.of(context).shixiaoquan,
                    style: TextStyle(
                      fontSize: 14.sp,
                      fontWeight:
                          state == 3 ? FontWeight.bold : FontWeight.normal,
                      color: state == 3 ? Colors.black : Color(0xff727272),
                    ),
                  ),
                ),
              ),
            ],
          ),
          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) {
                                  Navigator.of(context).pushNamed(
                                      '/router/write_off_page',
                                      arguments: {
                                        "couponId": coupons[position].id,
                                        "coupon": coupons[position].toJson(),
                                      });
                                } else {
                                  showStoreSelector(
                                      coupons[position].storeList);
                                }
                              }
                            },
                            () {
                              setState(() {
                                coupons[position].isEx =
                                    !coupons[position].isEx;
                              });
                            },
                            type: 0,
                          ),
                        );
                      },
                      itemCount: coupons != null ? coupons.length : 0,
                    )
                  : NoDataView(
                      isShowBtn: false,
                      text: "你还没有券~",
                      fontSize: 16.sp,
                      margin: EdgeInsets.only(top: 120.h),
                    ),
            ),
          ),
        ],
      ),
    );
  }

  receiveCoupon(couponId) async {
    BaseData baseData = await apiService.receiveCoupon(couponId);
    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();
      },
    );
  }
}