import { toast } from '../../utils/extendApi'  
import { getStorage, setStorage } from '../../utils/storage'  
// 导入ComponentWithStore方法  
import { ComponentWithStore } from 'mobx-miniprogram-bindings'  
import { userStore } from '../../stores/userstore'  
const computedBehavior = require('miniprogram-computed').behavior;  
  
ComponentWithStore({    
  storeBindings: {  
    store: userStore,  
    fields: ['id', 'identify'], // 从Store中获取id和identify，存放在页面的data里  
    actions: []  
  },  
  behaviors: [computedBehavior],  
//监听函数    
  watch :{  
    'status_roll': function(status_roll){  
      if(status_roll){
        //status_roll>0，开始动画
        this.startScrolling(); 
      } 
    }  
  },  
  data: {    
    status_lesson:1,
    status_sign:0,
    status_roll:0,//点名状态初始化为0 
    status_roll_string:'',//将status_roll转为文本
    texts: [], // 存储从后端获取的数组    
    displayText: '', // 当前显示的文本（滚动时显示随机文本，停止时显示最终结果）    
    // finalResult: '', // 最终要显示的点名结果    
    animation: {}, // 动画数据    
    animationData: {}, // 动画实例    
    intervalId: null, // 动画定时器ID，后面在轮询函数StartPolling函数中设置了另外一个定时器intervalId2
    timeoutId: null // 超时ID    
  },    
  methods:{  
 //   
    onLoad: function () {
      this.startPolling();      
      this.fetchTexts(); // 从后端获取文本数组    
    //   this.startScrolling(); // 开始滚动随机文本 
    // setStorage('status_sign',0);
    // console.log(getStorage('status_sign'));
    //   this.setData({
    //     status_sign:getStorage('status_sign')
    //   })   
      this.setData({ //初始化本地点名状态
        status_roll:0,
        LessonName:getStorage('LessonName')
      })  
    },
    SignIn(){
      console.log(this.data.status_sign)
        if( this.data.status_sign === 0){//未签到状态
          wx.request({
              url: `http://172.20.10.2:8600/student-api/student/studentsignin/${getStorage('id')}/${getStorage('LessonId')}`, // id在onload函数里面getStore获取
              success: (res) => {
                  if (res.data.code === 200) {
                   
                      this.setData({
                        status_sign: 1 //置1,，表示已经签完到
                      })
                      toast({ title: '签到成功', icon: 'success' });
                } else {
                  console.error('签到失败:', res.data);
                  toast({ title: '签到失败', icon: 'error' });
                }
              },
              fail(err) {
                console.error('请求失败:', err);
              }
            });
      } else {
          toast({ title: '无需重复签到！', icon: 'none' });
      }
      
      },
      SignOut(){
        wx.request({
          url: `http://172.20.10.2:8600/student-api/student/lessonstatus/${getStorage('LessonId')}`, // id在onload函数里面getStore获取
          success: (res) => {
              if (res.data.code === 200) {
                  this.setData({
                    status_lesson:   res.data.data                    })
                      
            } else {
              console.error('获取课程状态失败', res.data);
            }
          },
          fail(err) {
            console.error('请求失败:', err);
          }
        });

        if(this.data.status_lesson){
          toast({title:'未下课不能签退！',icon:'error'})
        } else{
          if( this.data.status_sign === 1){//已签到状态
            wx.request({
                url: `http://172.20.10.2:8600/student-api/student/studentsignout/${getStorage('id')}/${getStorage('LessonId')}`, // id在onload函数里面getStore获取
                success: (res) => {
                    if (res.data.code === 200) {
                     
                        this.setData({
                          status_sign: 0 //置0,，表示已经签退
                        })
                        toast({ title: '签退成功', icon: 'success' });
                        wx.switchTab({
                          url: '/pages/home/home',
                        })
                  } else {
                    console.error('签退失败', res.data);
                    toast({ title: '签退失败', icon: 'error' });
                  }
                },
                fail(err) {
                  console.error('请求失败:', err);
                }
              });
        } else {
            toast({ title: '还未签到！', icon: 'none'});
            
        }
        }
        
      },
// 从后端获取学号对应的文本数组    
    fetchTexts: function () {  
        const self = this;  
        wx.request({  
          url: `http://172.20.10.2:8600/student-api/student/getnolist/${getStorage('LessonId')}`, // 替换为实际的后端API地址  
          method: 'GET',  
          success: function (res) {  
            if (res.data && res.data.code === 200 &&  Array.isArray(res.data.data)) {  
              self.setData({ texts: res.data.data });  
            } else {  
              console.error('从后端获取文本数组失败:', res);  
            }  
          },  
          fail: function (err) {  
            console.error('函数调用失败:', err);  
          }  
        });  
      },    
//轮询      
    startPolling: function() {  
        // 设置轮询  
        this.intervalId2 = setInterval(() => {  
            wx.request({
                url: `http://172.20.10.2:8600/student-api/student/lessonroll/${getStorage('LessonId')}`, //学生根据课程id，轮询访问后端，点名状态
                success: (res) => {//如果成功
                if (res.data != null && res.data.code === 200) {//后端响应成功
                    console.log('后端响应成功',res.data.data)
                    if(res.data.data !== this.data.status_roll ){
                        console.log('roll值与本地记录不同,更新为',res.data.data)
                        this.setData({
                            status_roll : res.data.data //更新roll值
                        })
                    }
                        
                    } else {
                    console.error('后端响应出错:', res.data);
                    toast({ title: '后端响应出错', icon: 'error' });
                }
                },
                fail(err) {
                console.error('请求函数调用失败:', err);
                }
            });
        }, 1000); // 每1秒检查一次  
      },  
      startScrolling: function () {    
        const self = this;    
        const texts = this.data.texts;    
        if (texts.length === 0) return;    
        
        let currentIndex = Math.floor(Math.random() * texts.length); // 随机初始化当前索引    
        self.setData({ displayText: texts[currentIndex] });    
        
        this.data.intervalId = setInterval(function () {    
          currentIndex = (currentIndex + 1) % texts.length; // 更新索引    
          self.setData({ displayText: texts[currentIndex] }); // 更新显示的文本    
        }, 300); // 假设每300ms切换一次文本，可以根据需要调整速度  
        
        // 设置一个超时，在指定时间后停止滚动  
        const autoStopTime = 3000; // 例如，5秒后停止  
        this.data.timeoutId = setTimeout(function () {  
          self.stopScrollingAndShowResult();  
        }, autoStopTime);  
      },
//停止滚动   
    stopScrollingAndShowResult: function () {    
      clearInterval(this.data.intervalId); // 停止定时器  
      clearTimeout(this.data.timeoutId); // 清除超时设置，以防多次触发  
      
      const texts = this.data.texts;    
      const finalIndex = this.data.status_roll // 本地的roll值代表被抽中的学号  
      this.setData({ 
      
         status_roll_string : this.data.status_roll.toString() ,  
       
        // finalResult: texts[finalIndex] // 存储最终结果（如果需要后续使用）和data{}配合使用    
      });    
      this.setData({
        displayText: this.data.status_roll_string, // 更新显示文本为最终结果    
      })
    },    
//生命周期卸载      
    onUnload: function () {    
  
      this.stopPolling();           // 页面卸载时停止轮询
      clearInterval(this.data.intervalId); // 页面卸载时清除定时器  
      clearTimeout(this.data.timeoutId); // 页面卸载时清除超时设置  
    },
    //停止轮询
    stopPolling: function() {  
        if (this.intervalId2) {  
          clearInterval(this.intervalId2);  
          this.intervalId2 = null; // 清除引用  
        }  
      }  
  }    
  
});


  