import 'dart:convert';

import 'package:dio/dio.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/page.dart';
import 'package:huixiang/retrofit/data/user_bill.dart';
import 'package:huixiang/retrofit/data/user_info.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/my_appbar.dart';
import 'package:huixiang/view_widget/my_footer.dart';
import 'package:huixiang/view_widget/my_tab.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 IntegralDetailedPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _IntegralDetailedPage();
  }
}

class _IntegralDetailedPage extends State<IntegralDetailedPage>
    with SingleTickerProviderStateMixin, AutomaticKeepAliveClientMixin {
  List<Widget> _tabs;
  TabController tabController;

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    _tabs = [
      MyTab(
        text: S.of(context).huode,
      ),
      MyTab(
        text: S.of(context).xiaofei,
      ),
    ];
    tabController = TabController(length: 2, vsync: this)
      ..addListener(() {
        current = 1;
        if (tabController.index == 0) {
          queryDetail("bill_cate_point_get");
        } else {
          queryDetail("bill_cate_point_sub");
        }
      });
  }

  ApiService apiService;
  UserInfo userInfo;

  @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")),
          userInfo = UserInfo.fromJson(jsonDecode(value.getString('user'))),
          queryDetail("bill_cate_point_get"),
        });
  }

  int current = 1;
  List<UserBill> userBill = [];

  queryDetail(category) async {
    BaseData<PageInfo<UserBill>> baseData = await apiService.queryBillInfo({
      "current": current,
      "model": {"category": category, "title": "bill_title_point", "type": ""},
      "order": "descending",
      "size": 10,
      "sort": "id"
    }).catchError((onError) {
      refreshController.loadFailed();
      refreshController.refreshFailed();
    });
    if (current == 1) userBill.clear();
    if (baseData != null && baseData.isSuccess) {
      userBill.addAll(baseData.data.records);
      refreshController.loadComplete();
      refreshController.refreshCompleted();
      if (current * 10 > int.tryParse(baseData.data.total)) {
        refreshController.loadNoData();
      } else {
        current += 1;
      }
      setState(() {});
    } else {
      refreshController.loadFailed();
      refreshController.refreshFailed();
    }
  }

  RefreshController refreshController = RefreshController();

  _onRefresh() {
    current = 1;
    if (tabController.index == 0) {
      queryDetail("bill_cate_point_get");
    } else {
      queryDetail("bill_cate_point_sub");
    }
  }

  _loadMore() {
    if (tabController.index == 0) {
      queryDetail("bill_cate_point_get");
    } else {
      queryDetail("bill_cate_point_sub");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: NestedScrollView(
        headerSliverBuilder: (context, inner) {
          return [
            SliverAppBar(
              pinned: true,
              backgroundColor: Color(0xFF32A060),
              elevation: 0,
              title: Text(
                S.of(context).mingxi,
                style:
                    TextStyle(fontWeight: FontWeight.w500, color: Colors.white),
              ),
              centerTitle: false,
              leading: GestureDetector(
                onTap: () {
                  Navigator.of(context).pop();
                },
                child: Container(
                  alignment: Alignment.centerRight,
                  margin: EdgeInsets.only(left: 10),
                  padding: EdgeInsets.all(6),
                  child: Icon(
                    Icons.arrow_back_ios,
                    color: Colors.white,
                    size: 24,
                  ),
                ),
              ),
              titleSpacing: 2,
              leadingWidth: 56,
              flexibleSpace: FlexibleSpaceBar(
                background: Container(
                  alignment: Alignment.center,
                  margin: EdgeInsets.only(top: 56.h),
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    children: [
                      Text(
                        userInfo != null ? userInfo.points : "0",
                        style: TextStyle(
                            color: Colors.white,
                            fontWeight: MyFontWeight.medium,
                            fontSize: 48.sp),
                      ),
                      Text(
                        S.of(context).wodejifenzhi,
                        style: TextStyle(
                            color: Color(0xFFF2F2F2),
                            fontSize: 12.sp,
                            fontWeight: MyFontWeight.regular),
                      ),
                    ],
                  ),
                ),
              ),
              expandedHeight: 228,
              bottom: PreferredSize(
                  preferredSize: Size(double.infinity, 38),
                  child: Theme(
                    data: ThemeData(
                      splashColor: Colors.transparent, // 点击时的水波纹颜色设置为透明
                      highlightColor: Colors.transparent, // 点击时的背景高亮颜色设置为透明
                    ),
                    child: TabBar(
                      tabs: _tabs,
                      controller: tabController,
                      isScrollable: false,
                      indicatorSize: TabBarIndicatorSize.label,
                      labelColor: Colors.white,
                      labelStyle: TextStyle(
                          fontSize: 16.sp, fontWeight: MyFontWeight.medium),
                      unselectedLabelStyle: TextStyle(
                          fontSize: 16.sp, fontWeight: MyFontWeight.medium),
                      indicatorColor: Colors.white,
                      unselectedLabelColor: Color(0xFFE6E6E6),
                    ),
                  )),
            ),
          ];
        },
        body: Container(
          color: Colors.white,
          child: SmartRefresher(
            controller: refreshController,
            enablePullDown: true,
            enablePullUp: true,
            physics: ClampingScrollPhysics(),
            header: MyHeader(),
            footer: CustomFooter(
              builder: (context, mode) {
                return MyFooter(mode);
              },
            ),
            onRefresh: _onRefresh,
            onLoading: _loadMore,
            child: ListView.builder(
                itemCount: userBill != null ? userBill.length : 0,
                padding: EdgeInsets.only(top: 8, bottom: 8),
                itemBuilder: (context, position) {
                  return Container(
                    margin: EdgeInsets.fromLTRB(16, 8, 16, 8),
                    padding: EdgeInsets.fromLTRB(14, 7, 16, 7),
                    decoration: BoxDecoration(
                        color: Colors.white,
                        borderRadius: BorderRadius.all(Radius.circular(2)),
                        boxShadow: [
                          BoxShadow(
                            color: Colors.black.withAlpha(25),
                            offset: Offset(0, 1),
                            blurRadius: 12,
                            spreadRadius: 0,
                          )
                        ]),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.start,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        Image.asset(
                          "assets/image/icon_intergral_sign.webp",
                          width: 36.w,
                          height: 34.h,
                        ),
                        SizedBox(
                          width: 15,
                        ),
                        Expanded(
                            child: Container(
                          // height: 34.h,
                          alignment: Alignment.centerLeft,
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.spaceAround,
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Text(
                                userBill[position].name ?? "",
                                // S.of(context).qiandao,
                                style: TextStyle(
                                    color: Colors.black,
                                    fontSize: 12.sp,
                                    fontWeight: FontWeight.w400),
                              ),
                              Text(
                                userBill[position].createTime ?? "",
                                style: TextStyle(
                                    color: Color(0xFF727272),
                                    fontSize: 10.sp,
                                    fontWeight: MyFontWeight.regular),
                              )
                            ],
                          ),
                        )),
                        Container(
                          margin: EdgeInsets.only(top: 2.h),
                          child: Text(
                            "${tabController.index == 0 ? "+" : "-"}${double.tryParse(userBill[position].number ?? "0").toInt().toString()}",
                            style: TextStyle(
                                color: Color(0xFF727272),
                                fontSize: 12.sp,
                                fontWeight: MyFontWeight.regular),
                          ),
                        )
                      ],
                    ),
                  );
                }),
          ),
        ),
      ),
    );
  }

  @override
  bool get wantKeepAlive => true;
}