// pages/companion-apply/companion-apply.js
// 陪聊师申请页面 - 根据 Figma 设计重构
const api = require('../../utils/api')

Page({
  data: {
    statusBarHeight: 44,
    navBarHeight: 44,
    totalNavHeight: 88,
    applyStatus: 'none', // none, pending, approved, rejected
    statusTitle: '',
    statusDesc: '',
    showForm: true,
    agreed: false,
    formData: {
      realName: '',
      city: '',
      phone: '',
      remarks: ''
    },
    canSubmit: false
  },

  onLoad() {
    // 获取系统信息设置导航栏高度
    const systemInfo = wx.getSystemInfoSync()
    const statusBarHeight = systemInfo.statusBarHeight || 44
    const menuButton = wx.getMenuButtonBoundingClientRect()
    const navBarHeight = menuButton.height + (menuButton.top - statusBarHeight) * 2
    const totalNavHeight = statusBarHeight + navBarHeight
    
    this.setData({
      statusBarHeight,
      navBarHeight,
      totalNavHeight
    })
    
    this.checkApplyStatus()
  },

  // 返回上一页
  goBack() {
    wx.navigateBack()
  },

  // 检查申请状态
  async checkApplyStatus() {
    // 先检查是否已登录（通过 Token 判断）
    const token = wx.getStorageSync('auth_token')
    console.log('checkApplyStatus - token:', token ? '已登录' : '未登录')
    
    if (!token) {
      console.log('用户未登录，显示申请表单')
      this.setData({ applyStatus: 'none' })
      return
    }
    
    wx.showLoading({ title: '加载中...' })
    try {
      const res = await api.companion.getApplyStatus()
      console.log('获取申请状态响应:', res)
      
      // 兼容两种响应格式: { success: true, data } 或 { code: 0, data }
      const isSuccess = res.success || res.code === 0
      
      if (isSuccess && res.data) {
        const data = res.data
        
        // 使用新的状态标识字段
        if (data.isApproved) {
          this.setData({
            applyStatus: 'approved',
            statusTitle: '您的资料已审核通过',
            statusDesc: '恭喜您成为陪聊师！现在可以进入工作台开始接单了'
          })
        } else if (data.isPending) {
          this.setData({
            applyStatus: 'pending',
            statusTitle: '正在审核中',
            statusDesc: '您已提交陪聊师申请，正在审核中，请耐心等待'
          })
        } else if (data.isRejected) {
          this.setData({
            applyStatus: 'rejected',
            statusTitle: '申请未通过',
            statusDesc: data.rejectReason || '很抱歉，您的申请未通过审核，您可以修改信息后重新申请'
          })
        } else if (data.canApply) {
          // 可以申请（没有申请记录或被拒绝后可重新申请）
          this.setData({ applyStatus: 'none' })
        } else {
          // 兼容旧格式，使用 status 字段
          const status = data.status
          if (status) {
            this.setData({
              applyStatus: status,
              statusTitle: this.getStatusTitle(status),
              statusDesc: this.getStatusDesc(status, data.rejectReason || data.reject_reason)
            })
          } else {
            this.setData({ applyStatus: 'none' })
          }
        }
      } else {
        console.log('没有申请记录，显示申请表单')
        this.setData({ applyStatus: 'none' })
      }
    } catch (err) {
      console.error('获取申请状态失败:', err)
      this.setData({ applyStatus: 'none' })
    } finally {
      wx.hideLoading()
    }
  },

  // 获取状态标题
  getStatusTitle(status) {
    const titles = {
      'pending': '正在审核中',
      'reviewing': '正在审核中',
      'approved': '您的资料已审核通过',
      'rejected': '申请未通过'
    }
    return titles[status] || '正在审核中'
  },

  // 获取状态描述
  getStatusDesc(status, rejectReason) {
    const descs = {
      'pending': '您已提交陪聊师申请，正在审核中，请耐心等待',
      'reviewing': '您已提交陪聊师申请，正在审核中，请耐心等待',
      'approved': '恭喜您成为陪聊师！现在可以进入工作台开始接单了',
      'rejected': rejectReason || '很抱歉，您的申请未通过审核，您可以修改信息后重新申请'
    }
    return descs[status] || '您的申请正在处理中'
  },

  // 重新申请
  reapply() {
    this.setData({ showForm: true, applyStatus: 'none' })
  },

  // 输入变化
  onInputChange(e) {
    const field = e.currentTarget.dataset.field
    const value = e.detail.value
    this.setData({
      [`formData.${field}`]: value
    })
    this.checkCanSubmit()
  },

  // 切换协议同意状态
  toggleAgreement() {
    this.setData({
      agreed: !this.data.agreed
    })
    this.checkCanSubmit()
  },

  // 查看协议
  viewAgreement() {
    wx.navigateTo({
      url: '/pages/agreement/agreement?code=cooperation_service'
    })
  },

  // 检查是否可以提交
  checkCanSubmit() {
    const { formData, agreed } = this.data
    
    const canSubmit = 
      formData.realName &&
      formData.phone &&
      formData.phone.length === 11 &&
      agreed
    
    this.setData({ canSubmit })
  },

  // 提交申请
  async submitApply() {
    if (!this.data.canSubmit) return

    const { formData } = this.data

    // 验证手机号
    if (!/^1[3-9]\d{9}$/.test(formData.phone)) {
      wx.showToast({ title: '请输入正确的手机号', icon: 'none' })
      return
    }

    wx.showLoading({ title: '提交中...' })
    try {
      const res = await api.companion.apply({
        realName: formData.realName,
        city: formData.city,
        phone: formData.phone,
        remarks: formData.remarks
      })

      if (res.success || res.code === 0) {
        wx.showToast({ title: '申请已提交', icon: 'success' })
        this.setData({
          applyStatus: 'pending',
          statusTitle: '申请审核中',
          statusDesc: '您的申请正在审核中，请耐心等待，我们会尽快处理',
          showForm: false
        })
      } else {
        wx.showToast({ title: res.message || '提交失败', icon: 'none' })
      }
    } catch (err) {
      console.error('提交申请失败:', err)
      wx.showToast({ title: err.message || '提交失败', icon: 'none' })
    } finally {
      wx.hideLoading()
    }
  }
})
