/**
 * 用户相关 API 接口
 */

import request from '@/common/utils/request'
import { API_CONFIG } from '@/common/config'

export const userApi = {
  /**
   * 用户登录
   * @param {Object} credentials 登录凭证
   * @param {string} credentials.username 用户名
   * @param {string} credentials.password 密码
   * @param {string} credentials.code 验证码（可选）
   */
  login(credentials) {
    return request.post(API_CONFIG.user.login, credentials)
  },

  /**
   * 微信登录
   * @param {Object} wxData 微信登录数据
   * @param {string} wxData.code 微信授权码
   * @param {string} wxData.encryptedData 加密数据（可选）
   * @param {string} wxData.iv 初始向量（可选）
   */
  wxLogin(wxData) {
    return request.post('/auth/wx-login', wxData)
  },

  /**
   * 用户注册
   * @param {Object} userData 注册数据
   * @param {string} userData.username 用户名
   * @param {string} userData.password 密码
   * @param {string} userData.phone 手机号
   * @param {string} userData.code 验证码
   */
  register(userData) {
    return request.post(API_CONFIG.user.register, userData)
  },

  /**
   * 用户登出
   */
  logout() {
    return request.post(API_CONFIG.user.logout)
  },

  /**
   * 刷新访问令牌
   * @param {string} refreshToken 刷新令牌
   */
  refreshToken(refreshToken) {
    return request.post('/auth/refresh-token', { refreshToken })
  },

  /**
   * 获取用户信息
   */
  getUserInfo() {
    return request.get(API_CONFIG.user.profile)
  },

  /**
   * 更新用户信息
   * @param {Object} userData 用户数据
   */
  updateUserInfo(userData) {
    return request.put(API_CONFIG.user.updateProfile, userData)
  },

  /**
   * 修改密码
   * @param {Object} passwordData 密码数据
   * @param {string} passwordData.oldPassword 旧密码
   * @param {string} passwordData.newPassword 新密码
   */
  changePassword(passwordData) {
    return request.put('/user/change-password', passwordData)
  },

  /**
   * 绑定手机号
   * @param {Object} phoneData 手机号数据
   * @param {string} phoneData.phone 手机号
   * @param {string} phoneData.code 验证码
   */
  bindPhone(phoneData) {
    return request.post('/user/bind-phone', phoneData)
  },

  /**
   * 解绑手机号
   * @param {Object} data 解绑数据
   * @param {string} data.code 验证码
   */
  unbindPhone(data) {
    return request.post('/user/unbind-phone', data)
  },

  /**
   * 绑定邮箱
   * @param {Object} emailData 邮箱数据
   * @param {string} emailData.email 邮箱
   * @param {string} emailData.code 验证码
   */
  bindEmail(emailData) {
    return request.post('/user/bind-email', emailData)
  },

  /**
   * 上传头像
   * @param {File} file 头像文件
   */
  uploadAvatar(file) {
    const formData = new FormData()
    formData.append('avatar', file)
    
    return request.post('/user/upload-avatar', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },

  /**
   * 获取用户统计信息
   */
  getUserStats() {
    return request.get('/user/stats')
  },

  /**
   * 获取用户操作日志
   * @param {Object} params 查询参数
   */
  getUserLogs(params) {
    return request.get('/user/logs', { params })
  },

  /**
   * 发送短信验证码
   * @param {Object} data 发送数据
   * @param {string} data.phone 手机号
   * @param {string} data.type 验证码类型
   */
  sendSmsCode(data) {
    return request.post('/auth/send-sms-code', data)
  },

  /**
   * 发送邮箱验证码
   * @param {Object} data 发送数据
   * @param {string} data.email 邮箱
   * @param {string} data.type 验证码类型
   */
  sendEmailCode(data) {
    return request.post('/auth/send-email-code', data)
  },

  /**
   * 验证短信验证码
   * @param {Object} data 验证数据
   * @param {string} data.phone 手机号
   * @param {string} data.code 验证码
   * @param {string} data.type 验证码类型
   */
  verifySmsCode(data) {
    return request.post('/auth/verify-sms-code', data)
  },

  /**
   * 验证邮箱验证码
   * @param {Object} data 验证数据
   * @param {string} data.email 邮箱
   * @param {string} data.code 验证码
   * @param {string} data.type 验证码类型
   */
  verifyEmailCode(data) {
    return request.post('/auth/verify-email-code', data)
  },

  /**
   * 忘记密码
   * @param {Object} data 重置数据
   * @param {string} data.phone 手机号
   * @param {string} data.code 验证码
   * @param {string} data.newPassword 新密码
   */
  forgotPassword(data) {
    return request.post('/auth/forgot-password', data)
  },

  /**
   * 重置密码
   * @param {Object} data 重置数据
   * @param {string} data.token 重置令牌
   * @param {string} data.newPassword 新密码
   */
  resetPassword(data) {
    return request.post('/auth/reset-password', data)
  },

  /**
   * 获取用户收藏列表
   * @param {Object} params 查询参数
   */
  getFavorites(params) {
    return request.get('/user/favorites', { params })
  },

  /**
   * 添加收藏
   * @param {Object} data 收藏数据
   * @param {string} data.type 收藏类型
   * @param {number} data.targetId 目标ID
   */
  addFavorite(data) {
    return request.post('/user/favorites', data)
  },

  /**
   * 取消收藏
   * @param {number} id 收藏ID
   */
  removeFavorite(id) {
    return request.delete(`/user/favorites/${id}`)
  },

  /**
   * 获取用户关注列表
   * @param {Object} params 查询参数
   */
  getFollows(params) {
    return request.get('/user/follows', { params })
  },

  /**
   * 关注用户
   * @param {number} userId 用户ID
   */
  followUser(userId) {
    return request.post('/user/follow', { userId })
  },

  /**
   * 取消关注
   * @param {number} userId 用户ID
   */
  unfollowUser(userId) {
    return request.delete(`/user/follow/${userId}`)
  },

  /**
   * 获取用户粉丝列表
   * @param {Object} params 查询参数
   */
  getFollowers(params) {
    return request.get('/user/followers', { params })
  },

  /**
   * 获取用户设置
   */
  getUserSettings() {
    return request.get('/user/settings')
  },

  /**
   * 更新用户设置
   * @param {Object} settings 设置数据
   */
  updateUserSettings(settings) {
    return request.put('/user/settings', settings)
  },

  /**
   * 注销账户
   * @param {Object} data 注销数据
   * @param {string} data.password 密码
   * @param {string} data.reason 注销原因
   */
  deleteAccount(data) {
    return request.post('/user/delete-account', data)
  },

  /**
   * 实名认证
   * @param {Object} data 认证数据
   * @param {string} data.realName 真实姓名
   * @param {string} data.idCard 身份证号
   * @param {string} data.idCardFront 身份证正面照
   * @param {string} data.idCardBack 身份证背面照
   */
  realNameAuth(data) {
    return request.post('/user/real-name-auth', data)
  },

  /**
   * 获取实名认证状态
   */
  getRealNameAuthStatus() {
    return request.get('/user/real-name-auth/status')
  }
}