import 'dart:async';
import 'dart:io';

import 'package:ef/ef.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/svg.dart';
import 'package:vbvs_app/common/color/appConstants.dart';
import 'package:vbvs_app/common/util/FitTool.dart';
import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
import 'package:vbvs_app/controller/main_bottom/global_controller.dart';
import 'package:vbvs_app/controller/main_bottom/main_page_controller.dart';
import 'package:vbvs_app/controller/message/message_controller.dart';
import 'package:vbvs_app/controller/theme_controller/ThemeController.dart';
import 'package:vbvs_app/controller/user_info_controller.dart';
import 'package:vbvs_app/enum/LoginStatus.dart';
import 'package:vbvs_app/pages/main_bottom/e_page.dart';
import 'package:vbvs_app/pages/main_bottom/home_page.dart';
import 'package:vbvs_app/pages/main_bottom/message_page.dart';
import 'package:vbvs_app/pages/main_bottom/mine_page.dart';

class MainPageBottomChange extends GetView<MainPageController> {
  GlobalController globalController = Get.find();
  ThemeController themeController = Get.find();
  MessageController messageController = Get.find();
  getBottomNavigationBarItem(String svgPath, String actSvgPath, String label,
      {double size = 0, bool isEmpty = false, bool showBadge = false}) {
    if (size == 0) {
      size = 36.rpx;
    }
    Widget buildIcon(String path) {
      return Padding(
        padding: EdgeInsets.only(bottom: 6.rpx),
        child: isEmpty
            ? Container()
            : Stack(
                clipBehavior: Clip.none,
                children: [
                  SvgPicture.asset(
                    path,
                    width: size,
                    height: size,
                  ),
                  if (showBadge)
                    Positioned(
                      right: -20.rpx,
                      top: -2.rpx,
                      child: Container(
                        width: 14.rpx,
                        height: 14.rpx,
                        decoration: BoxDecoration(
                          color: Colors.red,
                          shape: BoxShape.circle,
                        ),
                      ),
                    )
                ],
              ),
      );
    }

    return BottomNavigationBarItem(
      icon: buildIcon(actSvgPath),
      activeIcon: buildIcon(svgPath),
      label: label,
    );
  }

  List arr = [
    HomePage(),
    // SleepReportPage(),
    EPage(),
    MessagePage(),
    MinePage(),
  ];

  DateTime? _lastBackPressedTime; // 记录上一次返回的时间
  @override
  Widget build(BuildContext context) {
    return PopScope(
      canPop: false,
      onPopInvokedWithResult: (disposition, result) async {
        if (Platform.isAndroid) {
          var flag = await _handleBackPressed(context); // 自定义返回逻辑
          if (flag) {
            SystemNavigator.pop();
          }
        }
      },
      child: Obx(
        () {
          if (globalController.model.hideBottomNavigationBar == true) {
            return Scaffold(
              body: arr[controller.model.currentIndex],
              floatingActionButtonAnimator:
                  FloatingActionButtonAnimator.noAnimation,
              floatingActionButton: Container(),
            );
          } else {
            return Container(
                decoration: BoxDecoration(
                  image: DecorationImage(
                    image: AssetImage('assets/img/bgImage.png'), // 本地图片
                    fit: BoxFit.fill, // 填满整个 Container
                  ),
                ),
                child: Scaffold(
                  backgroundColor: Colors.transparent,
                  body: arr[controller.model.currentIndex],
                  floatingActionButtonAnimator:
                      FloatingActionButtonAnimator.noAnimation,
                  floatingActionButtonLocation:
                      FloatingActionButtonLocation.centerDocked,
                  bottomNavigationBar: Theme(
                    data: Theme.of(context).copyWith(
                      splashFactory: NoSplash.splashFactory,
                      splashColor: Colors.transparent,
                      highlightColor: Colors.transparent,
                    ),
                    child: Container(
                      decoration: BoxDecoration(
                        border: Border(
                          top: BorderSide(
                            color: themeController.currentColor.sc4
                                .withOpacity(0.5),
                            width: AppConstants().border_width,
                          ),
                        ),
                      ),
                      child: BottomNavigationBar(
                        unselectedItemColor: themeController.currentColor.sc4,
                        selectedItemColor: themeController.currentColor.sc1,
                        backgroundColor: themeController.currentColor.sc5,
                        selectedFontSize: 26.rpx,
                        unselectedFontSize: 26.rpx,
                        type: BottomNavigationBarType.fixed,
                        currentIndex: controller.model.currentIndex,
                        onTap: (index) {
                          Future.delayed(const Duration(milliseconds: 100), () {
                            UserInfoController userInfoController = Get.find();
                            bool isLoggedIn = userInfoController.model.login ==
                                LoginStatus.LOGIN.code;

                            if ((index == 1 || index == 2) && !isLoggedIn) {
                              TopSlideNotification.show(
                                context,
                                text: "必须登录提示".tr,
                                textColor: themeController.currentColor.sc9,
                              );
                              Future.delayed(Duration(milliseconds: 50), () {
                                if (Get.currentRoute == '/ePage' ||
                                    Get.currentRoute == '/messagePage') {
                                  Get.back();
                                }
                                Future.delayed(Duration(milliseconds: 100), () {
                                  Get.toNamed("/otherLoginPage");
                                });
                              });
                              return;
                            }

                            if (controller.model.currentIndex != index) {
                              globalController.model.hideBottomNavigationBar =
                                  false;
                              globalController.updateAll();
                            }

                            controller.model.currentIndex = index;
                            controller.updateAll();
                          });
                        },
                      
                        items: [
                          getBottomNavigationBarItem("assets/img/menu/home.svg",
                              "assets/img/menu/n_home.svg", "菜单.首页".tr),
                          getBottomNavigationBarItem("assets/img/menu/e.svg",
                              "assets/img/menu/n_e.svg", "菜单.小e".tr),
                          getBottomNavigationBarItem(
                              "assets/img/menu/message.svg",
                              "assets/img/menu/n_message.svg",
                              "菜单.消息".tr,
                              showBadge: (messageController
                                          .model.body_message_read ==
                                      1 ||
                                  messageController.model.system_message_read ==
                                      1)),
                          getBottomNavigationBarItem("assets/img/menu/mine.svg",
                              "assets/img/menu/n_mine.svg", "菜单.我的".tr),
                        ],
                      ),
                    ),
                  ),
                ));
          }
        },
      ),
    );
  }

  Future<bool> _handleBackPressed(BuildContext context) async {
    final currentTime = DateTime.now();

    // 如果上次点击返回键时间为空，或者间隔超过 1 秒
    if (_lastBackPressedTime == null ||
        currentTime.difference(_lastBackPressedTime!) > Duration(seconds: 2)) {
      _lastBackPressedTime = currentTime;
      // showToast("再按一次退出程序", color: color_warning, closeTime: 2);
      TopSlideNotification.show(context, text: "滑动退出提醒".tr);
      return false; // 阻止退出程序
    } else {
      return true; // 允许退出程序
    }
  }
}
