import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:functional_widget_annotation/functional_widget_annotation.dart';
import 'package:marking_app/common/mixin/common.dart';
import 'package:marking_app/common/model/common/base_structure_result.dart';
import 'package:marking_app/common/model/job/job_knowledge_points.dart';
import 'package:marking_app/common/model/job/job_student_history.dart';
import 'package:marking_app/components/ReturnToHomepage.dart';
import 'package:marking_app/pages/homework_correction/widget/personal_detail_topbar.dart';
import 'package:marking_app/routes/RouterManager.dart';
import 'package:marking_app/utils/easy_refresh/MyEmptyWidget.dart';
import 'package:marking_app/utils/index.dart';
import 'package:marking_app/utils/my_text.dart';
import 'package:marking_app/utils/request/rest_client.dart';
import 'package:percent_indicator/percent_indicator.dart';
import 'package:syncfusion_flutter_datepicker/datepicker.dart';

part 'job_knowledge_points.g.dart';

class JobKnowledgePoints extends StatefulWidget {

  const JobKnowledgePoints({Key? key,}) : super(key: key);

  @override
  _JobKnowledgePointsState createState() => _JobKnowledgePointsState();
}

class _JobKnowledgePointsState extends State<JobKnowledgePoints> with CommonMixin, TickerProviderStateMixin {
  @override
  int page = 1;
  int pageSize = 10;
  int totalPages = 0;
  late TabController tabController;
  String startDataTime =  CommonUtils.getWeekStartDate().toString().substring(0, 10);
  String endDataTime =  CommonUtils.getWeekEndDate().toString().substring(0, 10);
  String customTimeStr = '自定义';
  List<KnowledgePoints> dataList = [];
  late final EasyRefreshController refreshController;

  //文本输入框控制器
  late final TextEditingController textController;
   int studentId = 0;

  @override
  void initState() {
    super.initState();
    textController = TextEditingController();

    refreshController = EasyRefreshController();
    tabController = TabController(length: 3, vsync: this);
    EasyLoading.show(status: 'loading...');
    getList();
  }

  @override
  void dispose() {
    super.dispose();
    tabController.dispose();
    textController.dispose();
  }

  void getList() async {
    print('startDataTime=$startDataTime');
    print('endDataTime=$endDataTime');
    RestClient _client = await getClient();
    BaseStructureResult<List<KnowledgePoints>> res =
    await _client.getKnowledgeReport(startDataTime,endDataTime,textController.text);
    if (res.success) {
      setState(() {
        if (page == 1) {
          dataList = res.data!;
        } else {
          dataList = [...dataList, ...res.data!];
        }

        // totalPages = res.data!.pagedList.totalPages;
      });
    }

    EasyLoading.dismiss();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Color.fromRGBO(245, 245, 245, 1),
      appBar: AppBar(
        backgroundColor: Colors.white,
        title: Text('知识点掌握', style: TextStyle(fontSize: 14.sp, color: Color(0xFF333333))),
        centerTitle: true,
        leading: IconButton(
          icon: Icon(Icons.arrow_back_ios, color: Colors.black),
          onPressed: () => Navigator.of(context).pop(),
        ),
        actions: [
          ReturnToHomepage(),
        ],
        elevation: 0,
      ),
      body: Column(
        children: [
         Container(
           margin: EdgeInsets.all(15.r),
           height: 30.r,
           child: Row(
             children: [
               Expanded(
                 child: Container(
                   padding: EdgeInsets.only(left: 10.r,right: 10.r),
                   decoration: BoxDecoration(
                     borderRadius: BorderRadius.circular(6.r),
                     border: Border.all(width: 1.r,color: Color(0xFFDDDDDD)),
                     color: Colors.white,
                   ),
                   child: TextField(
                     controller: textController,
                     textInputAction: TextInputAction.next,
                     style: TextStyle(
                       color: const Color.fromRGBO(80, 87, 103, 1),
                       fontSize: 10.sp,
                     ),
                     decoration: InputDecoration(
                       hintText: "请输入知识点名称",
                       hintStyle: TextStyle(fontSize: 10.sp, color: const Color.fromRGBO(153, 153, 153, 1)),
                       labelStyle: TextStyle(fontSize: 10.sp, color: const Color.fromRGBO(148, 163, 182, 1)),
                       border: InputBorder.none,
                     ),
                   ),
                 ),
               ),
               SizedBox(width: 10.r,),
               InkWell(
                 onTap: (){
                   page = 1;
                   setState(() {});
                   getList();
                 },
                 child: Container(
                   width: 50.r,
                   height: 30.r,
                   decoration: BoxDecoration(
                     borderRadius: BorderRadius.circular(4.r),
                     color: Color(0xFF6888FD),
                   ),
                   child:Center(
                     child: Text('查询',style: TextStyle(fontSize: 12.sp,color: Colors.white),),
                   ),
                 ),
               )
             ],
           ),
         ),


          jobConditionFilter(context,
              controller: tabController,
              customTimeStr: customTimeStr,
              customTime: tabController.index != 3 ||
                  ((endDataTime == null || endDataTime == '') && (startDataTime == null || startDataTime == ''))
                  ? null
                  : PickerDateRange(
                startDataTime == null || startDataTime == '' ? null : DateTime.parse(startDataTime!),
                endDataTime == null || endDataTime == '' ? null : DateTime.parse(endDataTime!),
              ), onTimeFilter: (String? startTime, String? endTime) {
                EasyLoading.show(status: 'loading...');
                if (startTime == null && endTime == null) {
                  if (tabController.index == 3) {
                    tabController.animateTo(0);
                  }
                  startDataTime = '';
                  endDataTime = '';
                  customTimeStr = '自定义';
                } else {
                  startDataTime = startTime != null ? startTime : '';
                  endDataTime = endTime != null ? endTime : '';
                }
                page = 1;
                setState(() {});
                getList();
                // _refreshController2.callRefresh();
              }, refreshTime: (value) {
                if (value != null && value.startDate != null) {
                  customTimeStr = value.startDate?.toString().substring(0, 10) ?? '';
                  setState(() {});
                  if (value.endDate != null) {
                    if (!isPad() && value.startDate!.year == value.endDate!.year) {
                      customTimeStr =
                          value.startDate.toString().substring(5, 10) + '~${value.endDate.toString().substring(5, 10)}';
                      setState(() {});
                    } else {
                      customTimeStr = '$customTimeStr~${value.endDate?.toString().substring(0, 10)}';
                      setState(() {});
                    }
                  }
                }
              }),
          Expanded(
            child: Padding(
              padding: EdgeInsets.symmetric(vertical: 10.r),
              child: EasyRefresh(
                firstRefresh: false,
                taskIndependence: true,
                controller: refreshController,
                header: MaterialHeader(),
                footer: TaurusFooter(),
                onRefresh: () async {
                  setState(() {
                    page = 1;
                  });
                  getList();
                },
                onLoad: () async {
                  if (page < totalPages) {
                    setState(() {
                      page += 1;
                    });
                    getList();
                  }
                },
                child: dataList.length > 0
                    ? ListView.builder(
                    itemCount: dataList.length,
                    itemBuilder: (context, index) {
                      KnowledgePoints item = dataList[index];
                      return InkWell(
                        onTap: () {
                          RouterManager.router.navigateTo(
                            context,
                            RouterManager.jobKnowledgePointsDetailPath +
                                '?knowledgeName=${Uri.encodeComponent(item.knowledgeName)}&knowledgeId=${item.knowledgeId}',
                            transition: getTransition(),
                          );
                        },
                        child: Container(
                          margin: EdgeInsets.symmetric(vertical: 5.r, horizontal: 14.r),
                          padding: EdgeInsets.symmetric(vertical: 14.r, horizontal: 10.r),
                          decoration: BoxDecoration(
                              borderRadius: BorderRadius.all(Radius.circular(10.r)),
                              color: Colors.white),
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.start,
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Row(
                                mainAxisAlignment: MainAxisAlignment.start,
                                crossAxisAlignment: CrossAxisAlignment.end,
                                children: [
                                  Expanded(
                                      child: Text(
                                        item.knowledgeName,
                                        style: TextStyle(fontSize: 14.sp, color: Color(0xFF505050)),
                                      )),

                                  Container(
                                    width: 49.r,
                                    height: 22.r,
                                    decoration: BoxDecoration(
                                      borderRadius: BorderRadius.all(Radius.circular(20.r)),
                                      border: Border.all(width: 1.r, color: Color(0xFF6888FD)),
                                    ),
                                    child: Row(
                                      mainAxisAlignment: MainAxisAlignment.center,
                                      children: [
                                        Text(
                                          '2次',
                                          style: TextStyle(fontSize: 10.sp, color: Color(0xFF6888FD)),
                                        ),
                                        Image.asset('assets/images/right_icon_blue.png',width: 8.r,height: 8.r,),
                                      ],
                                    ),
                                  ),
                                ],
                              ),
                              SizedBox(height: 10.r,),
                              progressBar(context,
                                  title: '正确率：',
                                  color: Color(0xFF90E0BE),
                                  percent: item.correctRate / 100,
                                  padingEdg: EdgeInsets.zero,
                                  marginEdg: EdgeInsets.only(top: 8.h)),
                            ],
                          ),
                        ),
                      );
                    })
                    : MyEmptyWidget(),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

@swidget
Widget progressBar(
    BuildContext context, {
      double? fontSize,
      double? lineHeight,
      required String title,
      required Color color,
      required double percent,
      required EdgeInsets padingEdg,
      required EdgeInsets marginEdg,
    }) {
  var percentStr = '${doubleToStringAsFixed(percent * 100)}%';
  fontSize ??= 10.sp;
  lineHeight ??= 8.h;
  return Container(
    margin: marginEdg,
    padding: padingEdg,
    child: Row(
      crossAxisAlignment: CrossAxisAlignment.center,
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        quickText(title, color: Color(0xFF8B8B8B), size: fontSize),
        Expanded(
          flex: 1,
          child: Container(
            child: Row(
              children: [
                Expanded(
                  child: Container(
                    decoration: BoxDecoration(
                      borderRadius: BorderRadius.circular(10.r),
                      /* boxShadow: [
                          BoxShadow(
                            color: color,
                            spreadRadius: 0.6,
                            blurRadius: 3,
                            offset: Offset(0, 0),
                          ),
                        ],*/
                    ),
                    child: LinearPercentIndicator(
                      padding: EdgeInsets.zero,
                      animation: true,
                      lineHeight: lineHeight,
                      animationDuration: 2500,
                      percent: percent,
                      /* center: Text(
                          percentStr,
                          style: TextStyle(color: Colors.white, fontSize: 4.5.sp),
                        ),*/
                      // linearStrokeCap: LinearStrokeCap.butt,
                      progressColor: color,
                      backgroundColor: Color(0xFFE8E8E8),
                      barRadius: Radius.circular(10.r),
                      // linearGradient: LinearGradient(
                      //   tileMode: TileMode.mirror,
                      //   stops: [0.0, 1.0],
                      //   colors: [color.withOpacity(0.1), color],
                      // ),
                    ),
                  ),
                ),
                SizedBox(width: 4.w),
                quickText(percentStr, size: fontSize, color: Color(0xFF606060))
              ],
            ),
          ),
        ),
      ],
    ),
  );
}

/// 已完成作业条件筛选栏
@hwidget
Widget jobConditionFilter(BuildContext context,
    {required TabController controller,
      PickerDateRange? customTime,
      required Function refreshTime,
      required String customTimeStr,
      required Function(String? startTime, String? endTime) onTimeFilter}) {
  var customTimeState = PickerDateRange(null, null);
  if (customTime != null) {
    customTimeState = PickerDateRange(customTime!.startDate != null ? customTime!.startDate : null,
        customTime!.endDate != null ? customTime!.endDate : null);
  }

  DateTime getMonthStartDate() {
    DateTime now = DateTime.now();
    return DateTime(now.year, now.month, 1); // 获取当前月份的第一天
  }

  DateTime getMonthEndDate() {
    DateTime now = DateTime.now();
    int nextMonth = now.month + 1;
    if (nextMonth > 12) {
      nextMonth = 1;
      now = now.add(Duration(days: 31 - now.day)); // 跨年了，所以加到当前月的最后一天
    } else {
      now = now.add(Duration(days: DateTime(now.year, nextMonth, 0).day - now.day)); // 加到下个月的第一天的前一天，即本月最后一天
    }
    return now;
  }

  return Container(
    // height: 39.h,
    // padding: EdgeInsets.only(left: 4.w, right: 12.w),
    decoration: BoxDecoration(
      color: Color.fromRGBO(244, 244, 244, 1),
      // border: Border(bottom: BorderSide(color: Color.fromRGBO(204, 204, 204, 1), width: 1)),
    ),
    child:  Container(
      alignment: Alignment.centerLeft,
      decoration: BoxDecoration(
          border: Border(bottom: BorderSide(width: 1.r,color: Color(0xFFCCCCCC)))
      ),
      child: TabBar(
        controller: controller,
        unselectedLabelStyle: TextStyle(fontSize: 12.sp, color: const Color.fromRGBO(102, 102, 102, 1)),
        labelStyle: TextStyle(
          fontSize: 12.sp,
          fontWeight: FontWeight.bold,
          color: Color.fromRGBO(116, 145, 253, 1),
        ),
        isScrollable: true,
        labelColor: Color(0xFF6888FD),
        unselectedLabelColor: Color(0xFF666666),
        padding: EdgeInsets.symmetric(horizontal: 14.r),
        // indicatorSize: TabBarIndicatorSize.label, // 设置指示器高度和标签一样高
        onTap: (int val) async {
          switch (val) {
            case 0: // 近一周
              onTimeFilter(
                CommonUtils.getWeekStartDate().toString().substring(0, 10),
                CommonUtils.getWeekEndDate().toString().substring(0, 10),
              );
              break;
            case 1: // 近一个月
              onTimeFilter(
                getMonthStartDate().toString().substring(0, 10),
                getMonthEndDate().toString().substring(0, 10),
              );
              break;
            default: // 自定义
              var dialogData = await showDialog<PickerDateRange?>(
                  context: context,
                  builder: (BuildContext context1) {
                    return Center(
                      child: Container(
                        color: Colors.white,
                        width: isPad() ? ScreenUtil().screenWidth / 2 : ScreenUtil().screenWidth / 1.3,
                        height: ScreenUtil().screenHeight / 2,
                        child: SfDateRangePicker(
                          showActionButtons: true,
                          confirmText: '确定',
                          cancelText: '取消',
                          onSubmit: (p0) {
                            print(p0);
                            Navigator.of(context1).pop(p0);
                            refreshTime(p0);
                          },
                          onCancel: () {
                            Navigator.of(context1).pop();
                          },
                          selectionMode: DateRangePickerSelectionMode.range,
                          initialSelectedRange: customTimeState,
                        ),
                      ),
                    );
                  });
              // startDate: 2024-03-04 18:47:00.117958, endDate: 2024-03-11 18:47:00.117986
              // if (dialogData != null && (dialogData.startDate != null || dialogData.endDate != null)) {}
              onTimeFilter(
                dialogData?.startDate?.toString().substring(0, 10),
                dialogData?.endDate?.toString().substring(0, 10),
              );
              customTimeState = dialogData!;
          }
        },
        tabs: <Widget>[
          const Tab(text: '近一周'),
          const Tab(text: '近一月'),
          Tab(text: customTimeStr),
        ],
      ),
    ),
  );
}
