// 搜索推荐算法相关的API接口
// 对应 JWLLL 后端服务

const BASE_URL = 'http://127.0.0.1:5000'

// 通用请求函数
const request = async (url, options = {}) => {
  try {
    const response = await fetch(url, {
      headers: {
        'Content-Type': 'application/json',
        ...options.headers
      },
      ...options
    })
    return await response.json()
  } catch (error) {
    console.error('API请求错误:', error)
    throw error
  }
}

// 搜索API
export const searchAPI = {
  // 搜索内容
  search: async (keyword, category = undefined) => {
    return await request(`${BASE_URL}/search`, {
      method: 'POST',
      body: JSON.stringify({ keyword, category })
    })
  },

  // 获取用户标签
  getUserTags: async (userId) => {
    return await request(`${BASE_URL}/user_tags?user_id=${userId}`)
  },

  // 标签推荐
  recommendByTags: async (userId, tags) => {
    return await request(`${BASE_URL}/recommend_tags`, {
      method: 'POST',
      body: JSON.stringify({ user_id: userId, tags })
    })
  },

  // 协同过滤推荐
  userBasedRecommend: async (userId, topN = 20) => {
    return await request(`${BASE_URL}/user_based_recommend`, {
      method: 'POST',
      body: JSON.stringify({ user_id: userId, top_n: topN })
    })
  },

  // 获取帖子详情
  getPostDetail: async (postId) => {
    return await request(`${BASE_URL}/post/${postId}`)
  },

  // 点赞帖子
  likePost: async (postId, userId) => {
    return await request(`${BASE_URL}/like`, {
      method: 'POST',
      body: JSON.stringify({ post_id: postId, user_id: userId })
    })
  },

  // 取消点赞
  unlikePost: async (postId, userId) => {
    return await request(`${BASE_URL}/unlike`, {
      method: 'POST',
      body: JSON.stringify({ post_id: postId, user_id: userId })
    })
  },

  // 添加评论
  addComment: async (postId, userId, content) => {
    return await request(`${BASE_URL}/comment`, {
      method: 'POST',
      body: JSON.stringify({ post_id: postId, user_id: userId, content })
    })
  },

  // 获取评论
  getComments: async (postId) => {
    return await request(`${BASE_URL}/comments/${postId}`)
  },

  // 上传帖子
  uploadPost: async (postData) => {
    return await request(`${BASE_URL}/upload`, {
      method: 'POST',
      body: JSON.stringify(postData)
    })
  }
}

export default searchAPI
