const app = getApp();
Page({
  data: {
    contact: '',
    phone: '',
    description: '',
    imageList: [],
    showNotification: true,
    countDown: 3,
    isFormValid: false,
    category: '投诉',
    categoryValue: '1',
    isPreviewMode: false,
    title: '',
    content: '',
    replyTime: '',
    replyContent: '',
    formSubmitted: false,
    isSubmitting: false,
    lastSubmitTime: 0,
    categoryMap: [
      {name: '投诉', value: '1'},
      {name: '建议', value: '2'}
    ],
  },

  onLoad: function (options) {
    this.startCountDown();

    // 检查是否是预览模式
    if (options.mode === 'preview') {
      const id = options.id;
      // 获取数据
      this.getDataById(id);
      // 设置为预览模式
      this.setData({
        isPreviewMode: true
      });
    } else {
      // 非预览模式才检查表单有效性
      this.checkFormValidity();
    }
  },

  onShow: function () {
    // 检查是否是从成功页面返回
    if (this.data.formSubmitted) {
      // 重置表单数据
      this.resetForm();
      // 重置提交状态标记
      this.setData({
        formSubmitted: false
      });
    }
  },

  startCountDown: function () {
    let that = this;
    let timer = setInterval(function () {
      if (that.data.countDown > 0) {
        that.setData({
          countDown: that.data.countDown - 1
        });
      } else {
        clearInterval(timer);
      }
    }, 1000);
  },

  goBack: function () {
    wx.navigateBack();
  },

  radioChange: function (e) {
    const value = e.detail.value;
    const selectedCategory = this.data.categoryMap.find(item => item.value === value || item.name === value);
    
    this.setData({
      category: selectedCategory.name,
      categoryValue: selectedCategory.value
    });
    this.checkFormValidity();
  },

  inputContact: function (e) {
    this.setData({
      contact: e.detail.value
    });
    this.checkFormValidity();
  },

  inputPhone: function (e) {
    const value = e.detail.value;
    const phoneNumber = value.replace(/\D/g, '');
    this.setData({
      phone: phoneNumber
    });
    this.checkFormValidity();
  },

  validatePhone: function (phone) {
    const phoneReg = /^1[3-9]\d{9}$/;
    return phoneReg.test(phone);
  },

  inputDescription: function (e) {
    this.setData({
      description: e.detail.value
    });
    this.checkFormValidity();
  },

  chooseImage: function () {
    let that = this;
    if (that.data.imageList.length >= 10) {
      wx.showToast({
        title: '最多只能上传10张图片',
        icon: 'none'
      });
      return;
    }

    wx.chooseMedia({
      count: 10 - that.data.imageList.length,
      mediaType: ['image'],
      sourceType: ['album', 'camera'],
      sizeType: ['compressed'],
      success: function (res) {
        let tempFiles = res.tempFiles;
        let validFiles = [];

        for (let i = 0; i < tempFiles.length; i++) {
          const file = tempFiles[i];
          if (file.size <= 10 * 1024 * 1024) {
            validFiles.push(file);
          } else {
            wx.showToast({
              title: '图片大小不能超过10M',
              icon: 'none'
            });
          }
        }

        if (validFiles.length > 0) {
          let newImageList = that.data.imageList.concat(validFiles);
          that.setData({
            imageList: newImageList
          });
        }
      }
    });
  },

  previewImage: function (e) {
    let index = e.currentTarget.dataset.index;
    wx.previewImage({
      current: this.data.imageList[index],
      urls: this.data.imageList
    });
  },

  deleteImage: function (e) {
    let index = e.currentTarget.dataset.index;
    let imageList = this.data.imageList;
    imageList.splice(index, 1);
    this.setData({
      imageList: imageList
    });
  },

  checkFormValidity: function () {
    const {
      contact,
      phone,
      description,
      category
    } = this.data;
    // 只检查必填项：联系人、联系电话和内容说明
    const isValid = contact.trim() !== '' && this.validatePhone(phone) && description.trim() !== '';

    this.setData({
      isFormValid: isValid
    });

    return isValid;
  },

  onInputChange: function (e) {
    const {
      field
    } = e.currentTarget.dataset;
    const {
      value
    } = e.detail;

    this.setData({
      [field]: value
    });

    this.checkFormValidity();
  },

  bindPickerChange: function (e) {
    this.checkFormValidity();
  },

  // 添加submitForm方法
  submitForm: function () {
    // 如果正在提交中，直接返回
    if (this.data.isSubmitting) {
      return;
    }
   
    if (!this.checkFormValidity()) {
      let errorMsg = '';

      if (!this.data.contact.trim()) {
        errorMsg = '请填写联系人';
      } else if (!this.validatePhone(this.data.phone)) {
        errorMsg = '请输入正确的联系电话';
      } else if (!this.data.description.trim()) {
        errorMsg = '请填写内容说明';
      }

      wx.showToast({
        title: errorMsg,
        icon: 'none'
      });
      return;
    }

    const now = Date.now();
    const lastSubmitTime = this.data.lastSubmitTime;
    // 如果距离上次提交时间小于 2 秒，直接返回
    if (now - lastSubmitTime < 2000) {
      // wx.showToast({
      //   title: '请勿重复提交',
      //   icon: 'none',
      // });
      return;
    }

    // 更新上次提交时间
    this.setData({
      lastSubmitTime: now,
    });

    const fileManager = wx.getFileSystemManager();
    this.data.imageList.map(imgInfo => {
      const base64 = fileManager.readFileSync(imgInfo.tempFilePath, 'base64');
      imgInfo.base64 = base64;
      return imgInfo;
    })
    const submitData = {
      category: this.data.categoryValue,
      contact: this.data.contact,
      phone: this.data.phone,
      description: this.data.description,
      images: this.data.imageList
    };
debugger
    // 设置正在提交中 防止重复点击提交按钮
    this.setData({
      isSubmitting: true,
    });

    console.log('提交的数据:', submitData);

    wx.showLoading({
      title: '提交中...',
    });
    wx.request({
      url: app.globalData.interfaceUrls.feedback,
      method: 'POST',
      header: {
        'content-type': 'application/json', // 默认值
        'token': app.globalData.userWxInfo.token,
        'source': "wc",
        '!SAAS_LOGIN_TOKEN_!': app.globalData.currentAccountInfo.dsKey
      },
      data: submitData,
      success(res) {
        wx.hideLoading();
        if (res.data.code == '200') {
          wx.navigateTo({
            url: '/pages/tousujianyiSuccess/tousujianyiSuccess',
          });
        }
      },
      fail(error) {
        wx.hideLoading()
        utils.simleInfo('登记失败，请稍后再试')
      },
      complete: () => {
        this.setData({
          isSubmitting: false, // 提交完成，重置标志位，可继续提交
          formSubmitted: true // 在提交成功后设置标记，返回将重置表单
        });
      },
    })
    // 在提交成功后设置标记，返回将重置表单
    // this.setData({
    //   formSubmitted: true
    // });
  },

  submitRepair: function () {
    this.submitForm();
  },

  // 根据ID获取数据
  getDataById: function (id) {
    // 这里应该是从服务器获取数据
    // 但为了演示，我们从本地数据中获取
    const pages = getCurrentPages();
    const prevPage = pages[pages.length - 2]; // 获取上一个页面

    if (prevPage && prevPage.data.noticeList) {
      const item = prevPage.data.noticeList.find(item => item.id == id);
      if (item) {
        const formatTime = (timeString) => {
          if (!timeString) return ''; // 如果时间为空，返回空字符串
          const date = new Date(timeString);
          const year = date.getFullYear();
          const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份补零
          const day = String(date.getDate()).padStart(2, '0'); // 日期补零
          return `${year}-${month}-${day}`;
        };
        
        let categoryName = '投诉';
        const categoryItem = this.data.categoryMap.find(cat => cat.value === item.category);
        if (categoryItem) {
          categoryName = categoryItem.name;
        }
        
        this.setData({
          category: categoryName,
          categoryValue: item.category || '1',
          contact: item.feedbackperson || '',
          description: item.replynote || '',
          phone: item.contactnumber || '',
          imageList: item.attachments || [],
          replyTime: formatTime(item.replytime) || '',
          replyContent: item.replycontent || ''
        });
      }
    }
  },

  resetForm: function () {
    this.setData({
      contact: '',
      phone: '',
      description: '',
      imageList: [],
      category: '投诉',
      categoryValue: '1'
    });
  }
});