import {
	clearCache,
	getPreferences
} from '../utils/utils.js'

// 所有接口统一出口
import request from '../utils/request.js'


// ===================== 用户相关接口 =====================
/**
 * 微信登录
 * @param {string} code - 微信登录code
 * @returns {Promise<{token: string, userInfo: Object}>}
 */
export const login = (code) => request({
	url: '/user/login',
	method: 'POST',
	data: {
		code
	}
})

/**
 * 获取用户信息
 * @returns {Promise<Object>}
 */
export const getUserInfo = () => request({
	url: '/user/info',
	method: 'POST'
})

/**
 * 更新用户信息
 * @returns {Promise<Object>}
 */
export const editUserInfo = (params) => request({
	url: '/user/edit',
	method: 'POST',
	data: params
})

/**
 * 退出登录
 * @returns {Promise<void>}
 */
export const logout = () => request({
	url: '/user/logout',
	method: 'POST'
})


// ===================== 用户配置相关接口（新增） =====================
/**
 * 获取用户配置（主题）
 * @returns {Promise<Object>} - {theme: string}
 */
export const getUserConfig = () => request({
  url: '/user/config/info',
  method: 'POST'
})

/**
 * 编辑用户配置
 * @param {Object} params - 配置参数
 * @param {string} [params.theme] - 主题 
 * @returns {Promise<Object>} - 更新后的配置信息
 */
export const editUserConfig = (params) => request({
  url: '/user/config/edit',
  method: 'POST',
  data: params
})

// ===================== 头像相关接口 =====================
/**
 * @typedef {Object} AvatarItem 头像项
 * @property {string} id - 头像ID
 * @property {string} url - 头像图片地址
 */

/**
 * 获取头像列表
 * @returns {Promise<AvatarItem[]>}
 */
export const getAvatarList = () => request({
	url: '/user/avatar/list',
	method: 'POST'
})


// ===================== 待办相关接口 =====================
/**
 * 添加待办
 * @param {Object} data - 待办数据
 * @param {string} data.content - 待办内容
 * @param {string} data.date - 日期 YYYY-MM-DD
 * @param {string} [data.remindTime] - 提醒时间
 * @param {number} [data.repeatType=0] - 重复类型
 * @returns {Promise<TodoItem>}
 */
export const addTodo = (data) => request({
	url: '/todo/add',
	method: 'POST',
	data
})

/**
 * 获取待办列表
 * @param {Object} params - 查询参数
 * @param {string} params.date - 日期 YYYY-MM-DD
 * @param {number} [params.status] - 状态 0-未完成 1-已完成
 * @returns {Promise<TodoItem[]>}
 */
export const getTodoList = (params) => request({
	url: '/todo/list',
	method: 'POST',
	data: params
})

/**
 * 删除待办
 * @param {Object} data - 删除参数
 * @param {string} data.id - 待办ID
 * @returns {Promise<void>}
 */
export const deleteTodo = (data) => request({
	url: '/todo/delete',
	method: 'POST',
	data
})

/**
 * 完成/取消完成待办
 * @param {Object} data - 操作参数
 * @param {string} data.id - 待办ID
 * @param {number} data.status - 状态 0-取消完成 1-完成
 * @returns {Promise<TodoItem>}
 */
export const doneTodo = (data) => request({
	url: '/todo/done',
	method: 'POST',
	data
})

/**
 * 编辑待办
 * @param {Object} data - 待办数据
 * @param {string} data.id - 待办ID
 * @param {string} [data.content] - 待办内容
 * @param {string} [data.date] - 日期
 * @param {string} [data.remindTime] - 提醒时间
 * @param {number} [data.repeatType] - 重复类型
 * @returns {Promise<TodoItem>}
 */
export const editTodo = (data) => request({
	url: '/todo/edit',
	method: 'POST',
	data
})

// ===================== 账单相关接口 =====================
/**
 * 添加账单
 * @param {Object} data - 账单数据
 * @param {number} data.type - 类型 1-支出 2-收入 3-转账
 * @param {string} data.money - 金额
 * @param {string} data.cate - 分类
 * @param {string} [data.note] - 备注
 * @param {string} data.date - 日期 YYYY-MM-DD
 * @param {string} [data.fromAccount] - 转出账户
 * @param {string} [data.toAccount] - 转入账户
 * @returns {Promise<BillItem>}
 */
export const addBill = (data) => request({
	url: '/bill/add',
	method: 'POST',
	data
})

/**
 * 编辑账单
 * @param {Object} data - 账单数据
 * @param {string} data.id - 账单ID
 * @param {number} [data.type] - 类型
 * @param {string} [data.money] - 金额
 * @param {string} [data.cate] - 分类
 * @param {string} [data.note] - 备注
 * @param {string} [data.date] - 日期
 * @param {string} [data.fromAccount] - 转出账户
 * @param {string} [data.toAccount] - 转入账户
 * @returns {Promise<BillItem>}
 */
export const editBill = (data) => request({
	url: '/bill/edit',
	method: 'POST',
	data
})

/**
 * 获取账单列表
 * @param {Object} params - 查询参数
 * @param {string} params.date - 日期 YYYY-MM-DD
 * @param {number} [params.type] - 类型 1-支出 2-收入 3-转账
 * @param {string} [params.keyword] - 搜索关键词
 * @returns {Promise<BillItem[]>}
 */
export const getBillList = (params) => request({
	url: '/bill/list',
	method: 'POST',
	data: params
})

/**
 * 删除账单
 * @param {Object} params - 删除参数
 * @param {string} params.id - 账单ID
 * @returns {Promise<void>}
 */
export const deleteBill = (params) => request({
	url: '/bill/delete',
	method: 'POST',
	data: params
})

/**
 * 获取月度统计
 * @param {Object} [params] - 查询参数
 * @param {string} [params.month] - 月份 YYYY-MM
 * @returns {Promise<MonthStat>}
 */
export const getMonthStat = (params = {}) => request({
	url: '/bill/stat/month',
	method: 'POST',
	data: params
})

/**
 * 获取分类统计
 * @param {Object} params - 查询参数
 * @param {string} params.month - 月份 YYYY-MM
 * @param {number} [params.type] - 类型 1-支出 2-收入
 * @returns {Promise<Object[]>}
 */
export const getCateStat = (params) => request({
	url: '/bill/stat/category',
	method: 'POST',
	data: params
})

/**
 * 导出账单
 * @param {Object} params - 导出参数
 * @param {string} params.startDate - 开始日期 YYYY-MM-DD
 * @param {string} params.endDate - 结束日期 YYYY-MM-DD
 * @param {number} [params.type] - 账单类型 1-支出 2-收入 3-转账
 * @returns {Promise<ExportBillRes>}
 */
export const exportBill = (params) => request({
	url: '/bill/export',
	method: 'POST',
	data: params
})

// ===================== 预算相关接口（新增） =====================
/**
 * 获取月度预算
 * @param {Object} [params] - 查询参数
 * @param {string} [params.month] - 月份 YYYY-MM，默认当前月
 * @returns {Promise<BudgetItem>}
 */
export const getMonthBudget = (params = {}) => request({
	url: '/budget/get',
	method: 'POST',
	data: params
})

/**
 * 设置/更新月度预算
 * @param {Object} data - 预算数据
 * @param {number} data.amount - 预算金额
 * @param {string} [data.month] - 月份 YYYY-MM，默认当前月
 * @returns {Promise<BudgetItem>}
 */
export const setMonthBudget = (data) => request({
	url: '/budget/set',
	method: 'POST',
	data
})

/**
 * 删除月度预算
 * @param {Object} params - 删除参数
 * @param {string} [params.month] - 月份 YYYY-MM，默认当前月
 * @returns {Promise<void>}
 */
export const deleteMonthBudget = (params = {}) => request({
	url: '/budget/delete',
	method: 'POST',
	data: params
})

// ===================== 分类管理接口 =====================
/**
 * 获取自定义分类列表
 * @param {number} [type] - 类型 1-支出 2-收入
 * @returns {Promise<Object[]>}
 */
export const getCustomCateList = (type) => request({
	url: '/category/list',
	method: 'POST',
	data: type ? {
		type
	} : {}
})

/**
 * 添加自定义分类
 * @param {Object} data - 分类数据
 * @param {string} data.name - 分类名称
 * @param {number} data.type - 类型 1-支出 2-收入
 * @param {string} [data.icon] - 图标
 * @param {string} [data.color] - 颜色
 * @returns {Promise<Object>}
 */
export const addCustomCate = (data) => request({
	url: '/category/add',
	method: 'POST',
	data
})

/**
 * 删除自定义分类
 * @param {Object} data - 删除参数
 * @param {string} data.id - 分类ID
 * @returns {Promise<void>}
 */
export const deleteCustomCate = (data) => request({
	url: '/category/delete',
	method: 'POST',
	data
})

// ===================== 心情相关接口 =====================
/**
 * 获取某天的心情
 * @param {Object} params - 查询参数
 * @param {string} params.date - 日期 YYYY-MM-DD
 * @returns {Promise<MoodItem>}
 */
export const getMoodByDate = (params) => request({
	url: '/mood/get',
	method: 'POST',
	data: params
})

/**
 * 保存心情
 * @param {Object} data - 心情数据
 * @param {string} data.date - 日期 YYYY-MM-DD
 * @param {string} data.emoji - 心情表情
 * @param {string} [data.content] - 心情内容（可选）
 * @returns {Promise<MoodItem>}
 */
export const saveMood = (data) => request({
	url: '/mood/save',
	method: 'POST',
	data
})

export const getAiMoodResult = (moodId) => request({
	url: '/ai/mood/result',
	method: 'POST',
	data: { mood_id: moodId }
})

export const regenerateAiMood = (moodId) => request({
	url: '/ai/mood/regenerate',
	method: 'POST',
	data: { mood_id: moodId }
})

/**
 * 获取心情列表
 * @param {Object} params - 查询参数
 * @param {string} [params.start_date] - 开始日期 YYYY-MM-DD
 * @param {string} [params.end_date] - 结束日期 YYYY-MM-DD
 * @returns {Promise<MoodItem[]>}
 */
export const getMoodList = (params = {}) => request({
	url: '/mood/list',
	method: 'POST',
	data: params
})

/**
 * 删除心情
 * @param {Object} data - 删除参数
 * @param {string} data.id - 心情ID
 * @returns {Promise<void>}
 */
export const deleteMood = (data) => request({
	url: '/mood/delete',
	method: 'POST',
	data
})


export const getCaptcha  = (data) => request({
	url: '/captcha/digit',
	method: 'POST',
	needLogin: false,
	showLoading: false
})

// ===================== 邮箱相关接口 =====================
/**
 * 获取邮箱验证码
 * @param {Object} data - 请求参数
 * @param {string} data.email - 邮箱地址
 * @returns {Promise<void>}
 */
export const sendEmailCode = (data) => request({
	url: '/user/email/code',
	method: 'POST',
	data
})

/**
 * 设置/修改邮箱
 * @param {Object} data - 请求参数
 * @param {string} data.email - 邮箱地址
 * @param {string} data.code - 验证码
 * @returns {Promise<Object>}
 */
export const setUserEmail = (data) => request({
	url: '/user/email/set',
	method: 'POST',
	data
})

export const emailLogin = (data) => request({
	url: '/user/email/login',
	method: 'POST',
	data
})

export const register = (data) => request({
	url: '/user/register',
	method: 'POST',
	data
})

export const resetPassword = (data) => request({
	url: '/user/reset-password',
	method: 'POST',
	data
})
export const changePassword = (data) => request({
	url: '/user/change-password',
	method: 'POST',
	data
})



export const checkEmailExists = (data) => request({
	url: '/user/email/exists',
	method: 'POST',
	data
})

export const bindWechat = (data) => request({
	url: '/user/bind-wechat',
	method: 'POST',
	data
})


// ===================== 复盘相关接口（新增） =====================
/**
 * 保存复盘数据
 * @param {Object} data - 复盘数据
 * @param {string} data.date - 日期 YYYY-MM-DD
 * @param {string} data.method - 复盘方法 kpt/grai
 * @param {Object} [data.kpt] - KPT数据
 * @param {string} data.kpt.keep - 保持
 * @param {string} data.kpt.problem - 问题
 * @param {string} data.kpt.try - 尝试
 * @param {Object} [data.grai] - GRAI数据
 * @param {string} data.grai.goal - 目标
 * @param {string} data.grai.result - 结果
 * @param {string} data.grai.analysis - 分析
 * @param {string} data.grai.insight - 洞察
 * @returns {Promise<ReviewItem>}
 */
export const saveReview = (data) => request({
	url: '/review/save',
	method: 'POST',
	data
})

/**
 * 获取单条复盘数据
 * @param {Object} params - 查询参数
 * @param {string} params.date - 日期 YYYY-MM-DD
 * @returns {Promise<ReviewItem>}
 */
export const getReviewByDate = (params) => request({
	url: '/review/get',
	method: 'POST',
	data: params
})

/**
 * 获取复盘列表
 * @param {Object} params - 查询参数
 * @param {string} [params.start_date] - 开始日期 YYYY-MM-DD
 * @param {string} [params.end_date] - 结束日期 YYYY-MM-DD
 * @param {string} [params.keyword]
 * @param {string} [params.page]
 * @param {string} [params.page_size]
 * @returns {Promise<ReviewItem[]>}
 */
export const getReviewList = (params = {}) => request({
	url: '/review/list',
	method: 'POST',
	data: params
})

/**
 * 删除复盘
 * @param {Object} params - 删除参数
 * @param {string} params.id - 复盘ID
 * @returns {Promise<void>}
 */
export const deleteReview = (params) => request({
	url: '/review/delete',
	method: 'POST',
	data: params
})

// ===================== 成长系统相关接口 =====================
/**
 * 获取成长信息
 * @returns {Promise<Object>}
 */
export const getGrowthInfo = () => request({
	url: '/growth/info',
	method: 'POST'
})

/**
 * 获取成就列表
 * @returns {Promise<Object[]>}
 */
export const getGrowthAchievements = () => request({
	url: '/growth/achievements',
	method: 'POST'
})

/**
 * 获取成长规则
 * @returns {Promise<Object>}
 */
export const getGrowthRules = () => request({
	url: '/growth/rules',
	method: 'POST'
})

// ===================== AI 智能分类接口 =====================
/**
 * AI 智能分类 - 提交内容后由后端自动分类并批量创建记录
 * @param {Object} data - 分类数据
 * @param {string} data.content - 用户输入的文本内容
 * @param {string} [data.date] - 日期 YYYY-MM-DD
 * @returns {Promise<{ items: Array<{category: string, data: Object}>, message: string }>}
 *   items[i].category: 'todo' | 'bill' | 'mood' | 'review'
 *   items[i].data - 对应类型的记录数据：
 *     todo:   { id, title, priority, date, end_time, ... }
 *     bill:   { id, money, cate, note, date, ... }
 *     mood:   { id, content, date, ... }
 *     review: { id, content, method, date, ... }
 */
export const aiClassify = (data) => request({
	url: '/ai/classify',
	method: 'POST',
	data,
	showLoading: false
})

// ===================== 首页聚合接口 =====================
/**
 * 获取首页每日聚合数据
 * 替代首页并发调用 getTodoList + getBillList + getMoodByDate
 * @param {Object} [params] - 查询参数
 * @param {string} [params.date] - 日期 YYYY-MM-DD，不传默认今天
 * @returns {Promise<Object>} 聚合数据，包含 todo/bill/mood/review/growth
 */
export const getDashboardDaily = (params = {}) => request({
	url: '/dashboard/daily',
	method: 'POST',
	data: params,
	showLoading: false
})

// ===================== 待办统计接口 =====================
/**
 * 获取待办统计数据
 * @param {Object} params - 查询参数
 * @param {string} params.start_date - 开始日期 YYYY-MM-DD
 * @param {string} params.end_date - 结束日期 YYYY-MM-DD
 * @returns {Promise<Object>} 统计数据
 */
export const getTodoStat = (params) => request({
	url: '/todo/stat',
	method: 'POST',
	data: params,
	showLoading: false
})

// ===================== 心情统计接口 =====================
/**
 * 获取心情统计数据
 * @param {Object} params - 查询参数
 * @param {string} params.month - 月份 YYYY-MM
 * @returns {Promise<Object>} 统计数据
 */
export const getMoodStat = (params) => request({
	url: '/mood/stat',
	method: 'POST',
	data: params,
	showLoading: false
})

// ===================== 账单聚合统计接口 =====================
/**
 * 获取账单聚合统计（整合 getMonthStat + getCateStat）
 * @param {Object} params - 查询参数
 * @param {string} params.start_date - 开始日期 YYYY-MM-DD
 * @param {string} params.end_date - 结束日期 YYYY-MM-DD
 * @param {number} [params.type] - 类型筛选 1-支出 2-收入
 * @returns {Promise<Object>} 聚合统计数据
 */
export const getBillAggregateStat = (params) => request({
	url: '/bill/stat/aggregate',
	method: 'POST',
	data: params,
	showLoading: false
})