// 帖子相关API接口
// 整合不同后端服务的帖子功能

// WZY 后端服务 - 帖子CRUD、点赞、评论
const WZY_BASE_URL = 'http://10.126.59.25:5714'
// LJC 后端服务 - 用户相关功能
const LJC_BASE_URL = 'http://10.126.59.25:5715'

// 通用请求函数
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 postsAPI = {
  // ===== 帖子基础功能 - 使用 WZY 服务 =====
  
  // 获取帖子列表
  fetchPosts: async (userId = null) => {
    const url = userId ? `${WZY_BASE_URL}/posts?user_id=${userId}` : `${WZY_BASE_URL}/posts`
    return await request(url)
  },

  // 获取帖子详情
  fetchPost: async (postId) => {
    return await request(`${WZY_BASE_URL}/posts/${postId}`)
  },

  // 创建帖子
  createPost: async (postData) => {
    return await request(`${WZY_BASE_URL}/posts`, {
      method: 'POST',
      body: JSON.stringify(postData)
    })
  },

  // 更新帖子
  updatePost: async (postId, postData) => {
    return await request(`${WZY_BASE_URL}/posts/${postId}`, {
      method: 'PUT',
      body: JSON.stringify(postData)
    })
  },

  // 删除帖子
  deletePost: async (postId) => {
    return await request(`${WZY_BASE_URL}/posts/${postId}`, {
      method: 'DELETE'
    })
  },

  // ===== 互动功能 - 使用 WZY 服务 =====

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

  // 取消点赞
  unlikePost: async (postId, userId) => {
    return await request(`${WZY_BASE_URL}/posts/${postId}/like`, {
      method: 'DELETE',
      body: JSON.stringify({ user_id: userId })
    })
  },

  // 添加评论
  addComment: async (postId, userId, content, parentId = null) => {
    return await request(`${WZY_BASE_URL}/posts/${postId}/comments`, {
      method: 'POST',
      body: JSON.stringify({ 
        user_id: userId, 
        content,
        parent_id: parentId 
      })
    })
  },

  // 获取评论列表
  fetchComments: async (postId) => {
    return await request(`${WZY_BASE_URL}/posts/${postId}/comments`)
  },

  // ===== 用户相关功能 - 使用 LJC 服务 =====

  // 获取用户信息
  getCurrentUser: async () => {
    return await request(`${LJC_BASE_URL}/api/current-user`)
  },

  // 获取用户详情
  getUser: async (userId) => {
    return await request(`${LJC_BASE_URL}/api/user/${userId}`)
  },

  // 获取用户帖子
  getUserPosts: async (userId) => {
    return await request(`${LJC_BASE_URL}/api/user/${userId}/posts`)
  },

  // 关注用户
  followUser: async (followeeId) => {
    return await request(`${LJC_BASE_URL}/api/follow/${followeeId}`, {
      method: 'POST'
    })
  },

  // 取消关注
  unfollowUser: async (followeeId) => {
    return await request(`${LJC_BASE_URL}/api/follow/${followeeId}`, {
      method: 'DELETE'
    })
  },

  // 获取收藏列表
  getFavorites: async (userId) => {
    return await request(`${LJC_BASE_URL}/api/user/${userId}/favorites`)
  }
}

export default postsAPI
