import { http } from '@/utils/request'

// 用户相关类型定义
export interface UserProfile {
  id: string
  account: string
  username: string
  nickname?: string  // 可选，如果为空则使用username
  email?: string     // 可选
  phone?: string     // 可选
  avatar?: string    // 可选，头像URL
  birthDate?: string // 可选，生日
  location?: string  // 可选，所在地
  bio?: string       // 可选，个人简介
  memberLevel?: string // 可选，会员等级
  totalDays?: number   // 可选，使用天数
  selfAwareness?: number      // 可选，自我感知
  emotionalResilience?: number // 可选，情绪韧性
  actionPower?: number        // 可选，行动力
  empathy?: number           // 可选，共情力
  lifeEnthusiasm?: number    // 可选，生活热度
  status: number
  isVerified?: number        // 可选，是否已验证
  createTime: string
  updateTime: string
  lastActiveTime?: string    // 可选，最后活跃时间
}

export interface UserProfileUpdateRequest {
  nickname?: string
  email?: string
  phone?: string
  avatar?: string
  birthDate?: string
  location?: string
  bio?: string
}

export interface GrowthStats {
  selfAwareness: number
  emotionalResilience: number
  actionPower: number
  empathy: number
  lifeEnthusiasm: number
}

/**
 * 用户服务
 */
class UserService {
  /**
   * 获取当前用户个人资料
   */
  static async getCurrentUserProfile(): Promise<UserProfile> {
    const response = await http.get<UserProfile>('/user/profile')
    return response.data
  }

  /**
   * 更新当前用户个人资料
   */
  static async updateCurrentUserProfile(data: UserProfileUpdateRequest): Promise<UserProfile> {
    const response = await http.put<UserProfile>('/user/profile', data)
    return response.data
  }

  /**
   * 上传头像
   */
  static async uploadAvatar(file: File): Promise<string> {
    const formData = new FormData()
    formData.append('file', file)
    
    const response = await http.post<{ url: string }>('/user/avatar/upload', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
    return response.data.url
  }

  /**
   * 获取用户成长数据
   */
  static async getUserGrowthStats(): Promise<GrowthStats> {
    const response = await http.get<GrowthStats>('/user/growth-stats')
    return response.data
  }

  /**
   * 更新用户密码
   */
  static async updatePassword(data: {
    oldPassword: string
    newPassword: string
    confirmPassword: string
  }): Promise<void> {
    await http.put('/user/password', data)
  }

  /**
   * 验证邮箱
   */
  static async verifyEmail(code: string): Promise<void> {
    await http.post('/user/email/verify', { code })
  }

  /**
   * 发送邮箱验证码
   */
  static async sendEmailVerificationCode(): Promise<void> {
    await http.post('/user/email/send-code')
  }

  /**
   * 验证手机号
   */
  static async verifyPhone(code: string): Promise<void> {
    await http.post('/user/phone/verify', { code })
  }

  /**
   * 发送手机验证码
   */
  static async sendPhoneVerificationCode(): Promise<void> {
    await http.post('/user/phone/send-code')
  }
}

export default UserService
