import { toast } from '../../utils/extendApi'
import { getStorage, setStorage } from '../../utils/storage'
//导入ComponentWithStore方法
import { ComponentWithStore } from 'mobx-miniprogram-bindings'
import { userStore } from '../../stores/userstore'
import { configure } from 'mobx-miniprogram'

// pages/upteach/upteach.js
ComponentWithStore({
  storeBindings: {
    store: userStore,
    fields: ['id', 'identify'],//从Store中获取id和identify，存放在页面的data里
    actions: []
  },

  data: {
    LessonStatus: 0,
    Roll_Method: 0,
    Pick_Rule: [
      '',
      '积分低者概率up',
      '与日期奇偶相同学号者概率up'
    ],
    score: 0,
    stu_no: '',
    status_roll:0,//点名状态初始化为0 
    status_roll_string:'',//将status_roll转为文本
    texts: [], // 存储从后端获取的数组    
    displayText: '', // 当前显示的文本（滚动时显示随机文本，停止时显示最终结果）    
    // finalResult: '', // 最终要显示的点名结果    
    animation: {}, // 动画数据    
    animationData: {}, // 动画实例    
    intervalId: null, // 动画定时器ID，后面在轮询函数StartPolling函数中设置了另外一个定时器intervalId2
    timeoutId: null, // 超时ID    
    LessonName:''

  },

  methods: {
    onLoad:function(){
      this.setData({
        LessonName:getStorage('LessonName'),
        status_roll:0
      })
      
      this.fetchTexts();
    },
    // <!-- 点击按钮触发事件，向服务器发送请求更新该课程的上下课状态，并变更LessionStatus值
    OnLession() {
      // 请求开始上课，只发送LessionId，让服务器去更新该课程的状态为上课中。调用函数成功则将本地的LessionStatus更新成1，让按钮显示条件改变
      wx.request({
        url: `http://172.20.10.2:8600/teacher-api/teacher/classstart/${getStorage('LessonId')}`, // 请替换成
        success: (res) => {
          if (res.data != null && res.data.code === 200) {
            toast({ title: '开始上课', icon: 'success' });
            this.setData({
              LessonStatus: 1,
            })

          } else {
            console.error('上课失败，系统出错:', res.data);
            toast({ title: '系统出错', icon: 'error' });
          }
        },
        fail(err) {
          console.error('上课请求失败:', err);
        }
      });
    },

    OffLession() {
      // 请求结束上课，只发送LessionId，让服务器去更新该课程的状态为未上课。调用函数成功则将本地的LessionStatus更新成0，让按钮显示条件改变
      wx.request({
        url: `http://172.20.10.2:8600/teacher-api/teacher/classend/${getStorage('LessonId')}`, // 请替换成实际的接口地址
        method: 'GET',
        success: (res) => {
          if (res.data != null && res.data.code === 200) {
            console.log('结束上课:', res.data);//'true' or 'false'
            toast({ title: '结束上课', icon: 'success' });
            this.setData({
              LessonStatus: 0,
            });
            wx.switchTab({
              url: '/pages/home/home',
            })
            //如果显示有问题的话，使用set  
          } else {
            console.error('结束上课请求失败，系统出错:', res.data);
            toast({ title: '系统出错', icon: 'error' });
          }
        },
        fail(err) {
          console.error('上课请求失败:', err);
        }
      });
    },
    PickStudent() {
      //进行抽点

      this.setData({
        Roll_Method: this.getRandomInt(1, 2) // 生成1到5之间的随机整数  
      });
      console.log(this.data.Roll_Method); // 注意使用 this.data 来访问已设置的数据

      wx.request({
        url: `http://172.20.10.2:8600/student-api/student/classroll/${getStorage('LessonId')}/${this.data.Roll_Method}`, // 请替换成实际的接口地址
        method: 'GET',
        success: (res) => {
          if (res.data != null && res.data.code === 200) {
            console.log('抽点请求发送成功:', res.data);//'true' or 'false'
            toast({ title: '抽点成功', icon: 'success' });
          
            //点名结束，保留点名规则
            this.setData({
              stu_no: res.data.data,
              status_roll: res.data.data
              //保留学生学号
            })
            this.startScrolling()
            // this.setData({
            //   LessionStatus: 0 
            // })
            //如果显示有问题的话，使用set  
          } else {
            console.error('抽点请求发送失败，系统出错:', res.data);
            toast({ title: '系统出错', icon: 'error' });
          }
        },
        fail(err) {
          console.error('抽点失败:', err);
        }
      });
    },
    //加分函数
    AddScore() {
      wx.request({
        url: `http://172.20.10.2:8600/student-api/student/comment/${getStorage('LessonId')}/${this.data.stu_no}/${this.data.score}`, // 请替换成
        success: (res) => {
          if (res.data.code === 200) {
            toast({ title: '加分成功', icon: 'success' });
            this.setData({
              stu_no: '' //置零
            })

          } else {
            console.error('加分失败，系统出错:', res.data);
            toast({ title: '加分失败，系统出错', icon: 'error' });
          }
        },
        fail(err) {
          console.error('请求失败:', err);
        }
      });
    },
    // 在页面的JS文件中定义函数  
    getRandomInt(min, max) {
      return Math.floor(Math.random() * (max - min + 1)) + min;
    },
    handleInput: function (e) {
      this.setData({
        score: e.detail.value
      })
    },
    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);  
        }  
      });  
    },
    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, // 更新显示文本为最终结果    
    })
  },        
}
})