import http from './http'

// 백엔드 /api/board 엔드포인트와 매핑
export const boardApi = {
  list({ category = '', page = 1, size = 10, tag = '', keyword = '', searchType = '' } = {}) {
    return http.get('/board/posts', {
      params: {
        category: category || undefined,
        page,
        size,
        tag: tag || undefined,
        keyword: keyword || undefined,
        searchType: keyword ? searchType || 'title' : undefined,
      },
    })
  },
  get(id) {
    return http.get(`/board/posts/${id}`)
  },
  // 내 글/댓글 모아보기
  myPosts({ page = 1, size = 10 } = {}) {
    return http.get('/board/my/posts', { params: { page, size } })
  },
  myComments({ page = 1, size = 10 } = {}) {
    return http.get('/board/my/comments', { params: { page, size } })
  },
  create(payload) {
    return http.post('/board/posts', payload)
  },
  update(id, payload) {
    return http.put(`/board/posts/${id}`, payload)
  },
  remove(id) {
    return http.delete(`/board/posts/${id}`)
  },
  // 본문 인라인 이미지 업로드(서버 DB 저장) → { url } (예: /api/images/123)
  uploadImage(blob) {
    const fd = new FormData()
    fd.append('image', blob, 'image.jpg')
    return http.post('/board/images', fd, {
      headers: { 'Content-Type': 'multipart/form-data' },
      timeout: 30000,
    })
  },
  tags(category) {
    return http.get('/board/tags', { params: { category: category || undefined } })
  },
  tagGroups(category) {
    return http.get('/board/tag-groups', { params: { category: category || undefined } })
  },
  addComment(id, content) {
    return http.post(`/board/posts/${id}/comments`, { content })
  },
  removeComment(commentId) {
    return http.delete(`/board/comments/${commentId}`)
  },
  // 추천/비추천 (토글) — type: 'UP' | 'DOWN'
  votePost(id, type) {
    return http.post(`/board/posts/${id}/vote`, { type })
  },
  voteComment(commentId, type) {
    return http.post(`/board/comments/${commentId}/vote`, { type })
  },
  // 추천(👍)한 사람 목록
  recommenders(id) {
    return http.get(`/board/posts/${id}/recommenders`)
  },
  // 신고 (누적 5건 시 블라인드)
  reportPost(id) {
    return http.post(`/board/posts/${id}/report`)
  },
  reportComment(commentId) {
    return http.post(`/board/comments/${commentId}/report`)
  },
  // 댓글 블라인드 해제 (관리자)
  unblockComment(commentId) {
    return http.post(`/board/comments/${commentId}/unblock`)
  },
  // 신고 관리 (관리자) — 신고된 글/댓글 목록
  reports() {
    return http.get('/board/reports')
  },
  // 신고 무시 (관리자) — 블라인드 없이 신고 기록만 초기화
  dismissReport(targetType, targetId) {
    return http.post('/board/reports/dismiss', { targetType, targetId })
  },
  block(id, reason) {
    return http.post(`/board/posts/${id}/block`, { reason })
  },
  unblock(id) {
    return http.post(`/board/posts/${id}/unblock`)
  },
  // 공지 설정/해제 (관리자) — 목록 최상단 고정
  setNotice(id) {
    return http.post(`/board/posts/${id}/notice`)
  },
  unsetNotice(id) {
    return http.post(`/board/posts/${id}/unnotice`)
  },
}
