/**
 * 个人中心相关API接口模块
 * 提供用户信息管理、资料完善、偏好设置等相关的API接口
 */

import BaseRequest from '../utils/request-helper.js'
import { LOADING_TEXTS } from '../config/constants.js'

// ==================== API方法 ====================

// ==================== 用户信息相关API ====================

/**
 * 获取用户基本信息
 * @description 获取当前登录用户的基本信息，包括昵称、头像、个人资料等
 * @param {Object} [config={}] 自定义请求配置
 * @param {Object} [config.custom] 自定义请求选项
 * @param {boolean} [config.custom.loading] 是否显示loading，默认true
 * @param {boolean} [config.custom.toast] 是否显示错误提示，默认true
 * @returns {Promise<Object>} 返回用户信息对象
 * @example
 * // 基本用法
 * const userInfo = await getUserInfo()
 *
 * // 自定义配置
 * const userInfo = await getUserInfo({
 *   custom: { loading: false }
 * })
 */
export const getUserInfo = (config = {}) => {
	return BaseRequest.get('/user/info', {}, 'AUTHENTICATED_QUERY_WITH_LOADING', config)
}

/**
 * 获取微信用户信息
 * @description 获取当前登录用户的微信相关信息，包括微信昵称、头像等
 * @param {Object} [config={}] 自定义请求配置
 * @param {Object} [config.custom] 自定义请求选项
 * @param {boolean} [config.custom.loading] 是否显示loading，默认false
 * @param {boolean} [config.custom.toast] 是否显示错误提示，默认true
 * @returns {Promise<Object>} 返回微信用户信息对象
 * @example
 * // 基本用法
 * const wxUserInfo = await getWxUserInfo()
 *
 * // 自定义配置
 * const wxUserInfo = await getWxUserInfo({
 *   custom: { loading: true }
 * })
 */
export const getWxUserInfo = (config = {}) => {
	return BaseRequest.get('/user/wechat/mini/userinfo', {}, 'AUTHENTICATED_QUERY', config)
}

/**
 * 更新用户基本信息
 * @description 更新用户的基本信息，如昵称、头像、个人简介等
 * @param {Object} userInfo 用户信息对象
 * @param {string} [userInfo.nickName] 用户昵称
 * @param {string} [userInfo.avatarUrl] 头像URL
 * @param {string} [userInfo.bio] 个人简介
 * @param {string} [userInfo.gender] 性别
 * @param {string} [userInfo.birthday] 生日
 * @param {string} [userInfo.region] 地区
 * @param {Object} [config={}] 自定义请求配置
 * @returns {Promise<Object>} 返回更新后的用户信息
 * @example
 * await updateUserInfo({
 *   nickName: '新昵称',
 *   bio: '个人简介'
 * })
 */
export const updateUserInfo = (userInfo, config = {}) => {
	return BaseRequest.put('/user/info', userInfo, 'AUTHENTICATED_UPDATE', LOADING_TEXTS.UPDATING_USER_INFO, config)
}

/**
 * 获取用户宠物列表
 * @description 获取当前用户的所有宠物信息列表
 * @param {Object} [params={}] 查询参数
 * @param {number} [params.page] 页码，默认1
 * @param {number} [params.pageSize] 每页数量，默认20
 * @param {string} [params.type] 宠物类型筛选
 * @param {string} [params.status] 状态筛选
 * @param {Object} [config={}] 自定义请求配置
 * @returns {Promise<Object>} 返回宠物列表和分页信息
 * @example
 * // 获取所有宠物
 * const pets = await getUserPets()
 *
 * // 分页查询
 * const pets = await getUserPets({ page: 1, pageSize: 10 })
 */
export const getUserPets = (params = {}, config = {}) => {
	return BaseRequest.get('/user/pets', params, 'AUTHENTICATED_QUERY', config)
}

// ==================== 用户统计相关API ====================

/**
 * 获取用户统计数据
 * @description 获取用户的各项统计数据，如宠物数量、记录数量、提醒数量等
 * @param {Object} [config={}] 自定义请求配置
 * @param {Object} [config.custom] 自定义请求选项
 * @param {boolean} [config.custom.loading] 是否显示loading，默认false（后台获取）
 * @returns {Promise<Object>} 返回统计数据对象
 * @example
 * const stats = await getUserStats()
 * // 返回格式：
 * // {
 * //   petCount: 3,
 * //   recordCount: 25,
 * //   reminderCount: 5,
 * //   familyMemberCount: 2
 * // }
 */
export const getUserStats = (config = {}) => {
	return BaseRequest.get('/user/stats', {}, 'AUTHENTICATED_QUERY', config)
}

// ==================== 账户管理相关API ====================

/**
 * 注销用户账户
 * @description 永久删除用户账户及所有相关数据，此操作不可逆
 * @param {Object} [config={}] 自定义请求配置
 * @param {Object} [config.custom] 自定义请求选项
 * @param {boolean} [config.custom.loading] 是否显示loading，默认true
 * @param {string} [config.custom.loadingText] 自定义loading文本
 * @returns {Promise<Object>} 返回注销结果
 * @example
 * await deleteAccount()
 *
 * @warning 此操作将永久删除所有用户数据，请谨慎使用
 */
export const deleteAccount = (config = {}) => {
	return BaseRequest.delete('/user/account', {}, 'AUTHENTICATED_DELETE', LOADING_TEXTS.DELETING_ACCOUNT, config)
}

// ==================== 用户资料完善相关API ====================

/**
 * 完善用户资料信息
 * @description 用于新用户首次登录后完善个人资料信息，或更新现有资料
 * @param {Object} profileData 用户资料数据对象
 * @param {string} profileData.nickName 用户昵称（必填）
 * @param {string} [profileData.avatarUrl] 头像URL
 * @param {string} [profileData.gender] 性别：'男' | '女' | '保密'
 * @param {string} [profileData.birthday] 生日，格式：YYYY-MM-DD
 * @param {string} [profileData.region] 所在地区
 * @param {string} [profileData.bio] 个人简介
 * @param {Object} [config={}] 自定义请求配置
 * @param {Object} [config.custom] 自定义请求选项
 * @param {boolean} [config.custom.loading] 是否显示loading，默认true
 * @param {string} [config.custom.loadingText] 自定义loading文本
 * @returns {Promise<Object>} 返回完善后的用户信息
 * @example
 * // 基本用法
 * await completeUserProfile({
 *   nickName: '小明',
 *   gender: '男',
 *   birthday: '1990-01-01',
 *   region: '北京市',
 *   bio: '热爱宠物的程序员'
 * })
 *
 * // 自定义loading文本
 * await completeUserProfile(profileData, {
 *   custom: { loadingText: '正在创建用户资料...' }
 * })
 */
export const completeUserProfile = (profileData, config = {}) => {
	return BaseRequest.post('/user/profile/complete', profileData, 'AUTHENTICATED_UPDATE', LOADING_TEXTS.SAVING_PROFILE, config)
}

// ==================== 头像上传相关API ====================

/**
 * 上传用户头像
 * @description 上传并更新用户头像图片
 * @param {Object} avatarData 头像数据对象
 * @param {string} avatarData.avatarUrl 头像图片URL或base64数据
 * @param {Object} [config={}] 自定义请求配置
 * @returns {Promise<Object>} 返回上传结果和新的头像URL
 * @example
 * const result = await uploadAvatar({
 *   avatarUrl: 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...'
 * })
 */
export const uploadAvatar = (avatarData, config = {}) => {
	return BaseRequest.post('/user/avatar', avatarData, 'AUTHENTICATED_UPDATE', LOADING_TEXTS.UPLOADING_AVATAR, config)
}

// ==================== 用户偏好设置相关API ====================

/**
 * 获取用户偏好设置
 * @description 获取用户的个性化偏好设置，如通知设置、隐私设置等
 * @param {Object} [config={}] 自定义请求配置
 * @returns {Promise<Object>} 返回用户偏好设置对象
 * @example
 * const preferences = await getUserPreferences()
 */
export const getUserPreferences = (config = {}) => {
	return BaseRequest.get('/user/preferences', {}, 'AUTHENTICATED_QUERY', config)
}

/**
 * 更新用户偏好设置
 * @description 更新用户的个性化偏好设置
 * @param {Object} preferences 偏好设置对象
 * @param {boolean} [preferences.notificationEnabled] 是否启用通知
 * @param {boolean} [preferences.privacyMode] 是否启用隐私模式
 * @param {string} [preferences.theme] 主题设置：'light' | 'dark' | 'auto'
 * @param {Object} [config={}] 自定义请求配置
 * @returns {Promise<Object>} 返回更新后的偏好设置
 * @example
 * await updateUserPreferences({
 *   notificationEnabled: true,
 *   theme: 'dark'
 * })
 */
export const updateUserPreferences = (preferences, config = {}) => {
	return BaseRequest.put('/user/preferences', preferences, 'AUTHENTICATED_UPDATE', '正在保存设置...', config)
}

// ==================== 用户活动记录相关API ====================

/**
 * 获取用户活动记录
 * @description 获取用户的操作活动记录列表
 * @param {Object} [params={}] 查询参数
 * @param {number} [params.page] 页码，默认1
 * @param {number} [params.pageSize] 每页数量，默认20
 * @param {string} [params.type] 活动类型筛选
 * @param {string} [params.startDate] 开始日期
 * @param {string} [params.endDate] 结束日期
 * @param {Object} [config={}] 自定义请求配置
 * @returns {Promise<Object>} 返回活动记录列表和分页信息
 * @example
 * const activities = await getUserActivities({
 *   page: 1,
 *   pageSize: 10,
 *   type: 'pet_care'
 * })
 */
export const getUserActivities = (params = {}, config = {}) => {
	return BaseRequest.get('/user/activities', params, 'AUTHENTICATED_QUERY', config)
}


