// pages/login/login.js
const authService = require('../../services/authService.js')
const auth = require('../../utils/auth.js')

Page({
  data: {
    username: '',
    password: '',
    showPassword: false,
    loading: false,
    rememberMe: false
  },

  onLoad() {
    // 检查是否已登录
    if (auth.isAuthenticated()) {
      wx.reLaunch({
        url: '/pages/index/index'
      })
      return
    }
    
    // 尝试从本地存储恢复用户名
    this.loadStoredUsername()
  },

  onShow() {
    // 每次显示页面时检查登录状态
    if (auth.isAuthenticated()) {
      wx.reLaunch({
        url: '/pages/index/index'
      })
    }
  },

  /**
   * 加载存储的用户名
   */
  loadStoredUsername() {
    try {
      const storedUsername = wx.getStorageSync('remembered_username')
      if (storedUsername) {
        this.setData({
          username: storedUsername,
          rememberMe: true
        })
      }
    } catch (error) {
      console.error('加载存储用户名错误:', error)
    }
  },

  /**
   * 用户名输入
   */
  onUsernameInput(e) {
    this.setData({
      username: e.detail.value.trim()
    })
  },
  
  /**
   * 密码输入
   */
  onPasswordInput(e) {
    this.setData({
      password: e.detail.value
    })
  },
  
  /**
   * 切换密码显示
   */
  togglePassword() {
    this.setData({
      showPassword: !this.data.showPassword
    })
  },

  /**
   * 切换记住我
   */
  onRememberMeChange(e) {
    this.setData({
      rememberMe: e.detail.value
    })
  },

  /**
   * 处理登录
   */
  async handleLogin() {
    const { username, password, loading, rememberMe } = this.data
    
    // 参数验证
    if (!username || !password || loading) {
      if (!username) {
        wx.showToast({
          title: '请输入用户名',
          icon: 'none'
        })
      } else if (!password) {
        wx.showToast({
          title: '请输入密码',
          icon: 'none'
        })
      }
      return
    }
    
    this.setData({ loading: true })
    
    try {
      console.log('开始登录:', username)
      
      // 调用登录服务
      const response = await authService.login(username, password)
      
      if (response && response.success) {
        // 保存token
        if (response.token) {
          auth.setToken(response.token)
        }
        
        // 保存用户信息
        if (response.user) {
          auth.setUser(response.user)
          // 设置全局用户信息
          const app = getApp()
          if (app && app.login) {
            app.login(response.user)
          }
        } else {
          // 如果没有用户信息，尝试获取
          try {
            const userInfo = await authService.getUserInfo()
            if (userInfo) {
              auth.setUser(userInfo)
              // 设置全局用户信息
              const app = getApp()
              if (app && app.login) {
                app.login(userInfo)
              }
            }
          } catch (error) {
            console.warn('获取用户信息失败:', error)
          }
        }
        
        // 记住用户名
        if (rememberMe) {
          wx.setStorageSync('remembered_username', username)
        } else {
          wx.removeStorageSync('remembered_username')
        }
        
        // 显示成功提示
        wx.showToast({
          title: response.message || '登录成功',
          icon: 'success',
          duration: 2000
        })
        
        // 跳转到日检预警页面
        setTimeout(() => {
          wx.reLaunch({
            url: '/pages/warning/warning'
          })
        }, 1000)
        
      } else {
        throw new Error(response.message || '登录失败')
      }
      
    } catch (error) {
      console.error('登录失败:', error)
      
      // 显示错误提示
      wx.showToast({
        title: error.message || '登录失败，请检查用户名和密码',
        icon: 'error',
        duration: 3000
      })
      
      // 如果是认证错误，清除本地存储
      if (error.message && error.message.includes('认证')) {
        auth.clearAuth()
      }
      
    } finally {
      this.setData({ loading: false })
    }
  },

  /**
   * 快速登录（测试用）
   */
  quickLogin() {
    this.setData({
      username: 'admin',
      password: '123456',
      rememberMe: true
    })
  },

  /**
   * 重置表单
   */
  resetForm() {
    this.setData({
      username: '',
      password: '',
      showPassword: false,
      rememberMe: false
    })
  }
})
