import 'dart:async';
import 'dart:convert';
import 'dart:math';
import 'dart:typed_data';

import 'package:ef/ef.dart';
import 'package:json_annotation/json_annotation.dart';

part 'bedController.g.dart'; // 由json_serializable自动生成的部分

@JsonSerializable()
class BedModel {
  int patternType = 2; //1.助眠  2.手动

  int noAutoPattern = -1; //1 TV 2 零重力 3 阅读 4 放平
  int zhuMianPattern = -1; //1 一键放松 2 休闲模式 3腰部放松 4 腿部放松
  // int anMoleftRight = 1; //1.左侧律动  2右侧律动
  bool anMoStart = false; //启动按摩
  bool isAnMoBei = false; //背部律动
  bool isAnMoTui = false; //腿部律动
  int anMoPattern = -1; //1234分别为模式1、2、3、4
  double slideValue_bei = 1.0; //背部力度调节
  double slideValue_tui = 1.0; //腿部力度调节
  // bool isStart = false; //开启 关闭
  int timerPattern = 2; //定时设置 10、20、30分钟

  bool isZhuMian = false; //一键助眠开启
  int zhuMainInitTime = 0;
  int zhuMainRunTime = 1800; //默认床垫30分钟，床为15分钟
  int zhuMainRunAllTime = 1800; //默认床垫30分钟，床为15分钟
  int useLastTime = DateTime.now().millisecondsSinceEpoch; //最新的使用时间

  String? deviceMac; // 当前选中设备mac地址

  List bodyData = [
    {"lastData": {}, "bodyData": []},
    {"lastData": {}, "bodyData": []}
  ];

  BedModel();

  factory BedModel.fromJson(Map<String, dynamic> json) {
    try {
      return _$BedModelFromJson(json);
    } catch (e) {
      return BedModel();
    }
  }

  Map<String, dynamic> toJson() => _$BedModelToJson(this);
}

class BedController extends GetControllerEx<BedModel> {
  // WebsocketProp? websocketProp;

  // ble.ConnectedDeviceProp? deviceProp;

  // GlobalController get glcontroller => Get.find<GlobalController>();

  Function? calibrationListenCall;

  List pinlvTimerList = [null, null];

  BedController() {
    attr = GetModel(BedModel()).obs;
  }

 // @override
  // void onInit() {
  //   super.onInit();
  //   GlobalController globalController = Get.find();
  //   Timer.periodic(Duration(milliseconds: 1000), (e) {
  //     if (model.isZhuMian) {
  //       var deviceInfo = globalController.model.deviceMain; //获取当前选中设备信息
  //       if (deviceInfo != null &&
  //           deviceInfo.isNotEmpty &&
  //           model.deviceMac != deviceInfo["mac"]) {
  //         model.deviceMac = deviceInfo["mac"];
  //         String deviceType = deviceInfo["deviceType"]["id"];
  //         if (deviceType == "1") {
  //           //床
  //           model.zhuMainRunTime = 900;
  //           model.zhuMainRunAllTime = 900;
  //         } else if (deviceType == "3") {
  //           //床垫
  //           model.zhuMainRunTime = 1800;
  //           model.zhuMainRunAllTime = 1800;
  //         }
  //       }

  //       int time =
  //           DateTime.now().millisecondsSinceEpoch - model.zhuMainInitTime;
  //       time = time ~/ 1000;
  //       if (time <= model.zhuMainRunAllTime) {
  //         model.zhuMainRunTime = model.zhuMainRunAllTime - time;
  //       } else {
  //         model.isZhuMian = false;
  //         model.zhuMainRunTime = 0;
  //       }
  //     }
  //     updateAll();
  //   });
  // }

  // Future bleSendCode(d) async {
  //   Completer completer = Completer();
  //   bleSendCodeNext(completer, d);
  //   return completer.future;
  // }

  // Future bleSendCodeNext(Completer completer, d) async {
  //   if (deviceProp == null) {
  //     showToast("蓝牙设备尚未连接");
  //     completer.completeError(Exception("蓝牙设备尚未连接"));
  //     return;
  //   }
  //   if (deviceProp!.isClose) {
  //     showToast("蓝牙已断开,请稍后再试");
  //     completer.completeError(Exception("蓝牙已断开"));
  //     return;
  //   }
  //   model.useLastTime = DateTime.now().millisecondsSinceEpoch;
  //   deviceProp!.write(Uint8List.fromList(d), ([d]) {
  //     completer.complete("success");
  //   }, (d) {
  //     completer.completeError(Exception("蓝牙发送失败"));
  //   });
  // }

  // websocketInit() {
  //   websocketProp = WebsocketProp();
  //   websocketProp!.initState(CommonVariables.wsUrl, {"message": onMessage});
  // }

  // websocketSend(v) {
  //   var deviceMain = glcontroller.model.deviceMain;
  //   if (deviceMain == null || deviceMain["mac"] == null) {
  //     return;
  //   }
  //   print("websocketSend 发送 $v");
  //   websocketProp?.sendMessage(
  //       {"type": "10002", "did": deviceMain["bindMacA"], "state": v});
  //   if (deviceMain["bindMacB"] != null && deviceMain["bindMacB"] != "") {
  //     websocketProp?.sendMessage(
  //         {"type": "10002", "did": deviceMain["bindMacB"], "state": v});
  //   }
  // }

  // bodyDataHandle(index, data) {
  //   var bodyData = model.bodyData[index]["bodyData"];
  //   if (bodyData.length > 0 &&
  //       data["data"]["deviceSendTime"] != null &&
  //       data["data"]["deviceSendTime"] ==
  //           bodyData[bodyData.length - 1]["deviceSendTime"]) {
  //     return;
  //   }
  //   model.bodyData[index]["lastData"] = data["data"];
  //   model.bodyData[index]["bodyData"].add(data["data"]);
  //   if (model.bodyData[index]["bodyData"].length > 120) {
  //     model.bodyData[index]["bodyData"].removeAt(0);
  //   }
  // }

  // onMessage(d) {
  //   var data = jsonDecode(d);
  //   if (calibrationListenCall != null) {
  //     calibrationListenCall?.call(data);
  //     return;
  //   }
  //   // print("receive ${data["data"]["deviceNo"]}");
  //   String mac = "${data?["data"]?["deviceNo"]}".toUpperCase() ?? "";
  //   if (CommonVariables.test) {
  //     if (data["data"]["breathRate"] == 0) {
  //       data["data"]["breathRate"] = Random().nextInt(10) + 10;
  //     }
  //     if (data["data"]["heartRate"] == 0) {
  //       data["data"]["heartRate"] = Random().nextInt(10) + 60;
  //     }
  //   }
  //   if ("${glcontroller.model.deviceMain["bindMacA"]}".length > 6 &&
  //       mac == "${glcontroller.model.deviceMain["bindMacA"]}".toUpperCase()) {
  //     bodyDataHandle(0, data);
  //   } else if ("${glcontroller.model.deviceMain["bindMacB"]}".length > 6 &&
  //       mac == "${glcontroller.model.deviceMain["bindMacB"]}".toUpperCase()) {
  //     bodyDataHandle(1, data);
  //   }
  // }

  // anmoReset() {
  //   pinlvTimerList = [null, null];
  //   model.anMoStart = false; //启动按摩
  //   model.isAnMoBei = false;
  //   model.isAnMoTui = false;
  //   model.anMoPattern = -1; //1234分别为模式1、2、3、4
  //   model.slideValue_bei = 1.0; //背部力度调节
  //   model.slideValue_tui = 1.0; //腿部力度调节
  //   model.timerPattern = -1; //定时设置 10、20、30分钟
  //   updateAll();
  // }

  // resetParm() {
  //   model.noAutoPattern = -1; //1 TV 2 零重力 3 阅读 4放平
  //   model.zhuMianPattern = -1; //1 一键放松 2 休闲模式 3腰部放松 4 腿部放松
  //   model.isZhuMian = false;
  //   model.useLastTime = DateTime.now().millisecondsSinceEpoch;
  //   model.bodyData = [
  //     {"lastData": {}, "bodyData": []},
  //     {"lastData": {}, "bodyData": []}
  //   ];
  //   anmoReset();
  // }

  // anMoChange() {
  //   model.zhuMianPattern = -1; //1 一键放松 2 休闲模式 3腰部放松 4 腿部放松
  //   model.isZhuMian = false;
  //   updateAll();
  // }
}
