import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:functional_widget_annotation/functional_widget_annotation.dart';
import 'package:get/get.dart';
import 'package:badges/badges.dart' as badges;
import 'package:percent_indicator/percent_indicator.dart';
import 'package:making_school_asignment_app/common/job/work_student.dart';
import 'package:making_school_asignment_app/common/utils/enum_untils.dart';
import 'package:making_school_asignment_app/common/utils/utils.dart';
import 'package:making_school_asignment_app/page/global_widget/MyEmptyWidget.dart';
import 'package:making_school_asignment_app/page/global_widget/my_text.dart';
import 'package:making_school_asignment_app/routes/app_pages.dart';

import 'home_logic.dart';

part 'home_view.g.dart';

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin {
  final logic = Get.find<HomeLogic>();
  final state = Get.find<HomeLogic>().state;

  @override
  bool get wantKeepAlive => true;

  @override
  void initState() {
    super.initState();
    SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
      statusBarColor: Colors.transparent, //状态栏背景颜色
      statusBarIconBrightness: Brightness.light,
      systemStatusBarContrastEnforced: false,
    ));
  }

  @override
  Widget build(BuildContext context) {
    super.build(context);
    var spaceWidth = SizedBox(height: ScreenUtil().screenWidth / 30);
    return Scaffold(
      backgroundColor: Colors.white,
      body: OrientationBuilder(
        builder: (BuildContext context, Orientation orientation) {
          return EasyRefresh(
            firstRefresh: false,
            taskIndependence: true,
            enableControlFinishLoad: true,
            controller: logic.refreshController,
            header: MaterialHeader(),
            // footer: TaurusFooter(),
            onRefresh: () async {
              state.pageNumber = 1;
              return logic.getList();
            },
            // onLoad: () async {
            //   if (state.workList.length < state.totalCount.value) {
            //     state.pageNumber++;
            //     return logic.getList();
            //   }
            // },
            child: Stack(
              children: [
                Image.asset(
                  'assets/images/home_banner.png',
                  width: Get.width,
                  fit: BoxFit.fill,
                ),
                Container(
                  margin: EdgeInsets.only(top: 300.h),
                  padding: EdgeInsets.symmetric(vertical: 0, horizontal: 20.r),
                  decoration: BoxDecoration(
                      color: Colors.white, borderRadius: BorderRadius.only(topLeft: Radius.circular(30.r), topRight: Radius.circular(30.r))),
                  child: Column(
                    children: [
                      SizedBox(
                        height: 15.r,
                      ),
                      Text(
                        '我的作业管理',
                        style: TextStyle(fontSize: 20.sp, color: const Color(0xFF676666), fontWeight: FontWeight.w600),
                      ),
                      SizedBox(
                        height: 15.r,
                      ),
                      Row(
                        children: [
                          Expanded(
                            child: Obx(() {
                              return menuItem(
                                bgImg: 'assets/images/home_bg_01.png',
                                name: '作业批阅',
                                value: state.totalCount.value.toString(),
                                url: Routes.readOverPage,
                              );
                            }),
                          ),
                          SizedBox(
                            width: 20.r,
                          ),
                          Expanded(
                            child:
                                menuItem(bgImg: 'assets/images/home_bg_02.png', name: '知识点点掌握', url: Routes.studentHistoryWorkPage, page: 'points'),
                          ),
                        ],
                      ),
                      SizedBox(
                        height: 20.r,
                      ),
                      Row(
                        children: [
                          Expanded(
                            child:
                                menuItem(bgImg: 'assets/images/home_bg_03.png', name: '学生历史作业', url: Routes.studentHistoryWorkPage, page: 'history'),
                          ),
                          SizedBox(
                            width: 20.r,
                          ),
                          Expanded(
                            child: menuItem(bgImg: 'assets/images/home_bg_04.png', name: '答题轨迹', url: Routes.answerTrajectoryPage),
                          ),
                        ],
                      ),
                      SizedBox(
                        height: 20.r,
                      ),
                      Row(
                        children: [
                          menuItem(
                            bgImg: 'assets/images/home_bg_05.png',
                            name: '优先批阅设定',
                            url: Routes.studentHistoryWorkPage,
                            page: 'set',
                          ),
                          SizedBox(
                            width: 20.r,
                          ),
                        ],
                      ),
                      SizedBox(height: 15.h),
                    ],
                  ),
                )
              ],
            ),
          );
        },
      ),
    );
  }

  @override
  void dispose() {
    Get.delete<HomeLogic>();
    super.dispose();
  }
}

Widget menuItem({required String bgImg, required String name, String? value, required String url, String? page}) {
  return InkWell(
    onTap: () {
      Get.toNamed(url, arguments: {'page': page ?? ''});
    },
    child: Container(
      width: (Get.width - 60.r) / 2,
      height: (Get.width - 60.r) / 2 * 86 / 164,
      padding: EdgeInsets.symmetric(vertical: 15.r, horizontal: 15.r),
      decoration: BoxDecoration(
        image: DecorationImage(
          image: AssetImage(bgImg),
          fit: BoxFit.contain,
        ),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              Text(
                name,
                style: TextStyle(fontSize: 14.sp, color: const Color(0xFF4F4F4F), fontWeight: FontWeight.w600),
              ),
              if (value != null && value != '')
                Container(
                  width: 18.r,
                  height: 18.r,
                  alignment: Alignment.center,
                  decoration: BoxDecoration(
                    color: const Color(0xFFFF6969),
                    borderRadius: BorderRadius.all(Radius.circular(9.r)),
                  ),
                  child: Text(
                    value!,
                    style: TextStyle(fontSize: 10.sp, color: Colors.white, fontWeight: FontWeight.w600),
                  ),
                )
            ],
          ),
          const Spacer(),
          Row(
            mainAxisAlignment: MainAxisAlignment.end,
            children: [
              Image.asset(
                'assets/images/home_right_icon.png',
                width: 16.r,
                height: 16.r,
              ),
            ],
          ),
        ],
      ),
    ),
  );
}

class EntranceModel extends Object {
  String title;
  String image;
  String navigationUrl;
  String? page;

  EntranceModel({required this.title, required this.image, required this.navigationUrl, this.page});
}

@swidget
Widget $termRow(BuildContext context, List<EntranceModel> items, int? data) {
  var leng = items.length;
  Widget childWidget;
  switch (leng) {
    case 1:
      childWidget = Row(children: [Expanded(child: $TermItem(items[0], data!))]);
      break;
    case 2:
      childWidget = Row(children: [
        Expanded(flex: 9, child: $TermItem(items[0], data!)),
        // const Expanded(flex: 1, child: SizedBox()),
        SizedBox(width: ScreenUtil().screenWidth / 30),
        Expanded(flex: 9, child: $TermItem(items[1], data!)),
      ]);
      break;
    case 3:
      double theHeight = ScreenUtil().screenWidth / 30 + 54.h * 2;
      childWidget = Row(
        children: [
          Expanded(child: $TermItem(items[0], data!, theHeight: theHeight)),
          SizedBox(width: ScreenUtil().screenWidth / 30),
          Expanded(
            child: SizedBox(
              height: theHeight,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  $TermItem(items[1], data),
                  $TermItem(items[2], data),
                ],
              ),
            ),
          ),
        ],
      );
      break;
    default:
      childWidget = Container();
  }

  return Container(padding: EdgeInsets.symmetric(horizontal: 14.w), child: childWidget);
}

@swidget
Widget $termItem(BuildContext context, EntranceModel e, int data, {double? theHeight}) {
  bool isJob = e.title == '作业批阅';

  return Material(
    color: Colors.white,
    elevation: 3.r,
    shadowColor: const Color.fromRGBO(231, 231, 231, 1),
    borderRadius: BorderRadius.all(Radius.circular(8.r)),
    child: InkWell(
        onTap: () {
          Get.toNamed(e.navigationUrl, arguments: {'page': e.page ?? ''});
        },

        // splashColor: splashColor,
        borderRadius: BorderRadius.all(Radius.circular(8.r)),
        child: badges.Badge(
          showBadge: isJob && data > 0,
          ignorePointer: false,
          badgeContent: quickText(data, color: Colors.white, size: 10.sp),
          badgeAnimation: const badges.BadgeAnimation.rotation(
            animationDuration: Duration(seconds: 1),
            colorChangeAnimationDuration: Duration(seconds: 1),
            loopAnimation: false,
            curve: Curves.fastOutSlowIn,
            colorChangeAnimationCurve: Curves.easeInCubic,
          ),
          badgeStyle: badges.BadgeStyle(
            badgeColor: const Color.fromRGBO(255, 105, 105, 1),
            shape: badges.BadgeShape.square,
            borderRadius: BorderRadius.only(topLeft: Radius.circular(10.r), topRight: Radius.circular(8.5.r), bottomRight: Radius.circular(8.5.r)),
            // borderSide: BorderSide(color: Colors.white, width: 2),
            elevation: 1,
            padding: EdgeInsets.symmetric(horizontal: Utils.isPad() ? 11.w : 16.w, vertical: 2.h),
          ),
          position: badges.BadgePosition.topEnd(top: 10.r, end: 10.r),
          child: Container(
            height: theHeight,
            padding: EdgeInsets.symmetric(vertical: 12.h),
            decoration: BoxDecoration(
              borderRadius: BorderRadius.all(Radius.circular(8.r)),
              // boxShadow: [
              //   BoxShadow(
              //     color: const Color.fromRGBO(231, 231, 231, 1),
              //     offset: Offset(4.w, 6.h), //阴影y轴偏移量
              //     blurRadius: 8, //阴影模糊程度
              //     spreadRadius: 0.2, //阴影扩散程度
              //   )
              // ],
              // border: Border.all(width: 0.5.w, color: Color.fromARGB(255, 219, 226, 250)),
            ),
            alignment: Alignment.center,
            child: isJob
                ? Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Image.asset(e.image, height: 32.r, width: 32.r, fit: BoxFit.cover),
                      SizedBox(height: 6.r),
                      quickText(e.title, size: 12.sp, color: const Color.fromRGBO(79, 79, 79, 1), fontWeight: FontWeight.w500),
                    ],
                  )
                : Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Image.asset(e.image, height: 32.r, width: 32.r, fit: BoxFit.cover),
                      SizedBox(width: 6.r),
                      quickText(e.title, size: 12.sp, color: const Color.fromRGBO(79, 79, 79, 1), fontWeight: FontWeight.w500),
                    ],
                  ),
          ),
        )),
  );
}
