const app = getApp();
const {
  getBanner,
  listByDevice
} = require('../../utils/api.js');

import timeUtil from '../../utils/time_util.js';
import strings from '../../utils/strings.js';
import store from '../../utils/store.js';
import route_constant from '../../utils/route_constant.js';
import route_util from '../../utils/route_util.js';

/// 乐鑫相关
import lexin_util from '../../utils/lexin/util.js';
import lexin_jump from '../../utils/lexin/jump.js';
import lexin_add from '../../utils/lexin/add.js';
import lexin_scan from '../../utils/lexin/scan.js';

import lexin_subscribe from '../../utils/lexin/subscribe.js';
import lexin_connect from '../../utils/lexin/connect.js';
import lexin_message from '../../utils/lexin/message.js';
import {
  BtHelper
} from '../../devices/bt_helper.js';

Page({
  data: {
    nvabarData: {
      showCapsule: 0, //是否显示左上角图标   1表示显示    0表示不显示
      title: 'OhPlay', //导航栏 中间的标题
    },

    ///下午好
    isLogin: false,
    greeting: "",
    bannerList: [{
        "pic": "https://music-play.oss-cn-shenzhen.aliyuncs.com/device/20241028142233669038262.png"
      },
      {
        "pic": "https://music-play.oss-cn-shenzhen.aliyuncs.com/device/20240823145816541223911.png"
      }
    ],
    autoplay: true,
    interval: 3000, // 切换时间间隔
    duration: 500, // 滑动动画时长
    circular: true, // 衔接滑动
    indexPage: 0,
    ///是否展示频道
    showChannel: false,
    ////首页
    navBarHeight: app.globalData.navBarHeight,
    MenuButtonheight: app.globalData.MenuButtonheight,
    MenuButtonTop: app.globalData.MenuButtonTop,
    actionIndex: null,
    luoma: ["Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", " Ⅶ", "Ⅷ", "Ⅸ", "Ⅹ", "Ⅺ", "Ⅻ"],
    channelData: [],
    isOneLoading: true,
    uid: null,
    isSetWake: false,
    battery: 4, // 0≤电量<20，0格

    ////我的界面
    loginStatus: true,
    nickName: "未登录",
    userPic: './../../img/head_pic.png',
    intervalId: null,
    /// 是否第一次自动连接过
    autoConnected: false,
    intervalId1: null,
    intervalId2: null,

    deviceMacId: null,
    deviceListSelect: null,
    deviceList: [],
    connectDeviceIding: "",
  },

  onLoad(options) {
    var that = this;
    that.onDeviceLoad();
    that.onUserInfoLoad();
    that.onBannerLoad();
  },

  onShow() {
    var that = this;
    that.onBannerShow();
  },

  onDeviceLoad() {
    var that = this;
    var deviceList = store.getStore("deviceList");
    if (!strings.isEmpty(deviceList)) {
      that.updateDeviceList(deviceList, true, false);
    }

    ///监听蓝牙设备
    BtHelper.getInstance().initBluetoothAdapter();
    BtHelper.getInstance().getBluetoothDevices();
    BtHelper.getInstance().startScan(null, null, null);
    var isFirst = true;
    ///再秒再对比一次
    that.stopIntervalId1();
    that.data.intervalId1 = setInterval(async function () {
      isFirst = false;
      that.compareList();
    }, isFirst ? 6 * 1000 : 12 * 1000);
  },

  /// 对比蓝牙数据
  compareList() {
    var that = this;
    lexin_scan.compareList(function (list) {
      that.updateDeviceList(list, false, false);
    }, function (item) {
      that.addBlueDevice(item);
    });
  },

  // 回调
  mqttCallback(type, option) {
    // console.log("gadsfadsfadsfa==888===" + type);
    var that = this;
    let payloads = null;
    if (option && option.payload) {
      payloads = JSON.parse(option.payload);
    };

    switch (type) {
      ///先走订阅
      case "connect":
        lexin_subscribe.subscribeAllDevice();
        break;
        ///再走有在线
      case "message_onoffline":
        lexin_connect.searchOnlineDevice(payloads, function (list) {
          that.updateDeviceList(list, false, false);
        }, function () {
          that.setData({
            actionIndex: null,
            deviceListSelect: null,
          });
        });
        break;

      case "message":
        if (payloads) {
          var payloadType = payloads.type;
          var other = payloads.other;

          ///获取频道位置
          if (payloadType === "get_position" && other) {
            lexin_message.getPosition(other, function (actionIndex) {
              that.setData({
                actionIndex: actionIndex,
              });
            });
          }

          // 获取歌曲信息
          else if (payloadType === "get_dev_info" && other) {
            that.setDeviceInfor(other);
            lexin_message.getDeviceInfo(payloads);
          }

          ///获取电量
          else if (payloadType === "battery" && other) {
            var battery = lexin_message.getDeviceInfo(other.battery);
            that.setData({
              battery: battery,
            });
          }

          ///获取播放状态
          else if (payloadType === "play" || payloadType === "play_state") {
            lexin_message.getPlay();
          }
        }
        break;
      default:
    }
  },

  ///去连接设备数据
  actionDevice(device) {
    var that = this;
    // 取消订阅
    var deviceMacId = that.data.deviceMacId;
    if (!strings.isEmpty(deviceMacId)) {
      var pubResponse = lexin_util.getResponseByDeviceMacId(deviceMacId);
      app.unsubscribe(pubResponse);
    };
    that.subscribeCurrDevice(device);
  },

  ///数据处理
  subscribeCurrDevice(device) {
    var that = this;
    var isOK = app.globalData.client && app.globalData.client.connected;
    if (!isOK) {
      app.connect();
      setTimeout(() => {
        that.subscribeCurrDevice(device);
      }, 500);
      return;
    };

    var deviceId = device.deviceId;
    var deviceMacId = lexin_util.getDeviceMacId(deviceId);
    that.setData({
      deviceMacId: deviceMacId,
    });

    /// 订阅设备
    var pubResponse = lexin_util.getResponseByDeviceMacId(deviceMacId);
    app.subscribe(pubResponse);

    /// 获取设备信息
    const obj = {
      DstDeviceName: deviceMacId
    };
    app.PubMsg({
      type: "get_dev_info",
      ...obj
    });
  },

  ///选择对应的频道
  onTapChannelIndex(e) {
    var that = this;
    var index = e.currentTarget.dataset.index;
    lexin_jump.toChannelIndex(index, function (i) {
      that.setData({
        actionIndex: i,
      });
    });
  },

  getchannelData(clientType) {
    var that = this;
    listByDevice({
      clientType: clientType,
      unShowLoad: true,
    }).then((res) => {
      store.setStore("channelData", res);
      that.setData({
        channelData: res,
      });

      // 接收设备当前播放状态
      var deviceList = that.getDeviceList();
      var deviceListSelect = that.getDeviceListSelect();
      if (deviceListSelect === null || deviceList.length <= deviceListSelect) {
        return;
      };

      var deviceId = deviceList[deviceListSelect].deviceId;
      var deviceMacId = lexin_util.getDeviceMacId(deviceId);
      const obj = {
        DstDeviceName: deviceMacId
      }
      app.PubMsg({
        type: "get_position",
        ...obj
      });
    })
  },

  ///去频道详情
  onTapToChannel() {
    var that = this;
    var actionIndex = that.data.actionIndex;
    if (strings.isEmpty(actionIndex)) {
      return;
    }
    var channelData = that.getChannelData();
    if (channelData.length > actionIndex) {
      store.setStore("channelDeta", channelData[actionIndex]);
      wx.navigateTo({
        url: './../channelDetails/channelDetails'
      });
    }
  },

  onTapIndex(e) {
    var that = this;
    var index = e.currentTarget.dataset.index;
    var indexPage = that.data.indexPage;
    if (indexPage != index) {
      that.setData({
        indexPage: index,
      });
    }
  },

  onTapLogin() {
    var that = this;
    ///退出登录
    var isLogin = that.getIsLogin();
    if (isLogin) {
      that.logOut();
      return;
    }
    route_util.jump(route_constant.login);
  },

  ///退出登录
  logOut() {
    var that = this;
    wx.removeStorageSync('userInfo');
    wx.removeStorageSync('token');
    var nickName = "未登录";
    var greeting = that.getGreetBuNickName(nickName);
    that.setData({
      isLogin: false,
      greeting: greeting,
      nickName: nickName,
      userPic: "./../../img/head_pic.png",
    });

    var deviceList = that.getDeviceList();
    var deviceListSelect = that.getDeviceListSelect();
    if (deviceListSelect === null || deviceList.length <= deviceListSelect) {
      return;
    };

    ///有设备在线被选中，则让它不被选择
    if (deviceList[deviceListSelect].connectType == 3) {
      var deviceMacId = that.data.deviceMacId;
      if (!strings.isEmpty(deviceMacId)) {
        var pubResponse = lexin_util.getResponseByDeviceMacId(deviceMacId);
        app.unsubscribe(pubResponse);
        that.setData({
          deviceMacId: null,
          actionIndex: null,
          deviceListSelect: null,
        });
      };
    }
  },

  ///点击item
  // [{"deviceId":"BLUFI_7cdfa1fcbb24","name":"BLUFI_7cdfa1fcbb24","state":"online","ProdModel":"MW-2AX(WIFI-N)","devName":"猫王小王子OTR-X"}]
  onTapItem(e) {
    var that = this;
    var isLogin = that.getIsLogin();
    if (!isLogin) {
      route_util.jump(route_constant.login);
      return;
    }

    var index = e.currentTarget.dataset.index;
    var device = e.currentTarget.dataset.item;
    var connectType = device.connectType;
    var deviceListSelect = that.getDeviceListSelect();
    // wifi只支持在线点击
    if (connectType == 3 && device.state === "online") {
      if (index === deviceListSelect) {
        that.goWake();
      } else {
        that.addWifiDevice(device);
      }
      return;
    }

    ///去蓝牙连接处理
    if (index === deviceListSelect) {
      route_util.jumpParam('/pages/deviceDetail/detail', JSON.stringify(item))
    } else if (device.state === "offline") {
      console.log("去连接蓝牙")
    } else {
      // {"connectType":1,"deviceId":"E4:9F:80:09:40:EC","name":"E4:9F:80:09:40:EC","state":"online","ProdModel":"MW-SR1(4G_WIFI)","devName":"猫王音响x阿基米德 SR1 妙播收音机"}
      device.name = device.devName;
      BtHelper.getInstance().connect(device, function (isConnected, d) {
        if (isConnected) {
          that.addBlueDevice(d);
        }
      });
    }
  },

  // 去唤醒界面
  goWake() {
    var that = this;
    var deviceList = that.getDeviceList();
    var deviceListSelect = that.getDeviceListSelect();
    if (deviceListSelect === null || deviceList.length <= deviceListSelect) {
      return
    };
    var device = deviceList[deviceListSelect];
    wx.navigateTo({
      url: './../deviceWake/deviceWake?deviceId=' + device.deviceId + "&clientType=" + device.ProdModel,
    });
  },

  ///删除当前设备
  deleteDevice(e) {
    var that = this;
    var index = e.currentTarget.dataset.index;
    wx.showModal({
      title: '确定删除？',
      success: function (res) {
        if (res.confirm) {
          var deviceList = that.getDeviceList();
          if (deviceList[index].connectType == 3) {
            that.cancelWifi(index, false);
          } else {
            that.cancelBlue(index, false);
          }
        }
      }
    });
  },


  ///是否是同一个蓝牙
  isTheSameBlue(device) {
    var that = this;
    var deviceList = that.getDeviceList();
    var deviceListSelect = that.getDeviceListSelect();
    if (deviceListSelect === null || deviceList.length <= deviceListSelect) {
      return false;
    };

    if (deviceList[deviceListSelect].connectType == 3) {
      return false;
    } else {
      if (deviceList[deviceListSelect].deviceId == device.deviceId) {
        return true;
      } else {
        return false;
      }
    }
  },

  ///断开当前的
  cancelCurrent() {
    var that = this;
    var deviceList = that.getDeviceList();
    var deviceListSelect = that.getDeviceListSelect();
    if (deviceListSelect === null || deviceList.length <= deviceListSelect) {
      return;
    };

    if (deviceList[deviceListSelect].connectType == 3) {
      that.cancelWifi(deviceListSelect, true);
    } else {
      that.cancelBlue(deviceListSelect, true);
    }
  },

  /// 断开蓝牙连接
  cancelBlue(index, onlyCancel) {
    var that = this;
    if (onlyCancel) {
      return;
    }

    var deviceList = that.getDeviceList();
    var deviceId = deviceList[index].deviceId;
    ///删除当前设备
    deviceList = deviceList.filter((item, i) => {
      return deviceId !== item.deviceId;
    });

    store.setStore("deviceList", deviceList);
    that.setData({
      deviceListSelect: null,
      deviceList: deviceList,
    });
  },

  /// 断开连接wifi
  cancelWifi(index, onlyCancel) {
    var that = this;
    var deviceList = that.getDeviceList();
    if (index === null || deviceList.length <= index) {
      return;
    };

    var deviceId = deviceList[index].deviceId;
    // 取消订阅
    var pubResponse = lexin_util.getResponseByDeviceId(deviceId);
    app.unsubscribe(pubResponse);
    if (onlyCancel) {
      return;
    }

    deviceList = deviceList.filter((item, i) => {
      return deviceId !== item.deviceId;
    });

    store.setStore("deviceList", deviceList);
    that.setData({
      deviceList: deviceList,
      deviceMacId: null,
      actionIndex: null,
      deviceListSelect: null,
    });
  },

  /// 新添加蓝牙设备
  addBlueDevice(device) {
    var that = this;
    var addDeviceList = lexin_add.addBlueDevice(device);
    that.updateDeviceList(addDeviceList, false, false);
    that.setData({
      deviceListSelect: 0,
      autoConnected: true,
    });
  },

  // 新添加Wifi设备
  addWifiDevice(device) {
    var that = this;
    var that = this;
    var isOK = app.globalData.client && app.globalData.client.connected;
    if (!isOK) {
      app.connect();
      setTimeout(() => {
        that.addWifiDevice(device);
      }, 500);
      return;
    };

    var deviceId = device.deviceId;
    var addDeviceList = lexin_add.addWifiDevice(device);
    that.updateDeviceList(addDeviceList, false, false);

    that.setData({
      deviceListSelect: null,
      connectDeviceIding: deviceId,
    });
    lexin_subscribe.subscribeSingleDevice(device);
  },

  refreshCurrentDevice(device) {
    var that = this;
    var deviceList = that.getDeviceList();
    var selectIndex = null;
    for (var i = 0; i < deviceList.length; i++) {
      if (device.deviceId == deviceList[i].deviceId) {
        selectIndex = i;
        break;
      }
    }

    if (selectIndex != null) {
      var addDeviceList = lexin_add.addWifiDevice(device);
      that.updateDeviceList(addDeviceList, false, false);
      that.setData({
        autoConnected: true,
        deviceListSelect: selectIndex,
        connectDeviceIding: "",
      });
    }
  },

  /// 手机关闭蓝牙，所有蓝牙设备离线
  closeBlueResetOffline(isInit, closeAllBlue) {
    var that = this;
    var deviceList = that.getDeviceList();
    that.updateDeviceList(deviceList, isInit, closeAllBlue);
  },

  /// 更新列表排序
  updateDeviceList(deviceList, isInit, closeAllBlue) {
    var that = this;
    var finalList = lexin_add.updateDeviceList(deviceList, isInit, closeAllBlue);
    if (!strings.isEmpty(deviceList) || !strings.isEmpty(finalList)) {
      store.setStore("deviceList", finalList);
      that.setData({
        deviceList: finalList,
      });
    }
  },

  ///点击banner事件
  onTapBanner() {
    var that = this;
    var item = e.currentTarget.dataset.item;
  },

  ///添加设备
  jumpToAddDevice() {
    var that = this;
    var isLogin = that.getIsLogin();
    if (!isLogin) {
      route_util.jump(route_constant.login);
      return;
    }
    route_util.jump(route_constant.deviceList);
  },

  // 关于我们
  jumpToAboutUs() {
    lexin_jump.toAboutUs();
  },

  /// 是否已登录
  getIsLogin() {
    var that = this;
    var isLogin = that.data.isLogin;
    return isLogin;
  },

  /// 获取列表数据
  getDeviceList() {
    var that = this;
    var deviceList = that.data.deviceList;
    return deviceList;
  },

  ///获取当前选中的
  getDeviceListSelect() {
    var that = this;
    var deviceListSelect = that.data.deviceListSelect;
    return deviceListSelect;
  },

  ///获取是否已经第一次连接过
  getAutoConnected() {
    var that = this;
    var autoConnected = that.data.autoConnected;
    return autoConnected;
  },

  ///当前正在连接的设备id
  getConnectDeviceIding() {
    var that = this;
    var connectDeviceIding = that.data.connectDeviceIding
    return connectDeviceIding;
  },

  ///获取频道数据
  getChannelData() {
    var that = this;
    var channelData = that.data.channelData;
    return channelData;
  },

  /// 当前播放频道
  getActionIndex() {
    var that = this;
    var actionIndex = that.data.actionIndex;
    return actionIndex;
  },

  ///设置设备相关信息
  setDeviceInfor(other) {
    var that = this;
    // 接收设备当前信息
    that.getchannelData(other.ProdModel);
    // 电量
    var battery = lexin_message.getDeviceInfo(other.Power);
    that.setData({
      battery: battery,
    })
    // 当前设备木有设置定时
    that.setData({
      isSetWake: false,
    });
    other.alarm.map((v) => {
      if (v.enable === "1") {
        that.setData({
          isSetWake: true
        });
      }
    });
  },

  ///******************************* 可折叠 ********************************************///
  onUserInfoLoad() {
    var that = this;
    var userInfo = wx.getStorageSync("userInfo") || "";
    if (!strings.isEmpty(userInfo)) {
      var phone = userInfo.phone;
      if (!phone) {
        return;
      };

      var nickName = userInfo.nickname || "";
      var greeting = that.getGreetBuNickName(nickName);
      // 获取缓存的频道数据
      var channelData = wx.getStorageSync("channelData") || "";
      if (!strings.isEmpty(channelData)) {
        that.setData({
          channelData: channelData,
          greeting: greeting,
          nickName: nickName,
          userPic: userInfo.headUrl || "",
          isLogin: true,
        })
      } else {
        that.setData({
          greeting: greeting,
          nickName: nickName,
          userPic: userInfo.headUrl || "",
          isLogin: true,
        });
      }
    } else {
      var greeting = that.getGreetBuNickName("");
      that.setData({
        greeting: greeting,
      })
    }
  },

  getGreetBuNickName(nickName) {
    var greeting = timeUtil.getGreet();
    if (nickName != "" && nickName != "未登录") {
      greeting = greeting + '，' + nickName;;
    }
    return greeting;
  },

  onBannerLoad() {
    var that = this;
    // var bannerList = wx.getStorageSync("homeBanner") || [];
    // if (that.data.bannerList.length > 0) {
    //   that.setData({
    //     bannerList: bannerList
    //   });
    // }
  },

  onBannerShow() {
    var that = this;
    // getBanner({}).then((res) => {
    //   that.setData({
    //     bannerList: res
    //   });
    // store.setStore("homeBanner", res);
    // })
  },

  stopIntervalId1: function () {
    var that = this;
    if (!strings.isEmpty(that.data.intervalId1)) {
      clearInterval(that.data.intervalId1);
      that.data.intervalId1 = null;
    }
  },

  stopIntervalId2: function () {
    var that = this;
    if (!strings.isEmpty(that.data.intervalId2)) {
      clearInterval(that.data.intervalId2);
      that.data.intervalId2 = null;
    }
  },

  ///销毁蓝牙
  onUnload() {
    var that = this;
    that.stopIntervalId1();
    that.stopIntervalId2();
    if (!strings.isEmpty(that.data.intervalId)) {
      clearInterval(that.data.intervalId);
      that.data.intervalId = null;
    }
    BtHelper.getInstance().disconnect();
    if (app.globalData.client === null) {
      return;
    };
    app.globalData.client.end(true);
    app.globalData.client.end(true);
    app.globalData.client = null;
  },
})