import api from './index'
import { processImageUrl } from '../utils/imageUtils'

/**
 * 获取歌手列表
 * @param {number} page 页码
 * @param {number} size 每页大小
 * @param {string} keyword 关键字
 * @param {number} typeId 类型ID
 * @returns {Promise<any>}
 */
export function getSingerList(page = 1, size = 10, keyword = '', typeId = null) {
  return api.get('/singer/list', {
    params: {
      page,
      size,
      keyword,
      typeId
    }
  }).then(res => {
    if (res.code === 200 && res.data && res.data.list) {
      // 处理歌手头像URL
      res.data.list.forEach(singer => {
        if (singer.avatar) {
          singer.avatar = processImageUrl(singer.avatar)
        }
      })
    }
    return res
  })
}

/**
 * 根据ID获取歌手
 * @param {number} id 歌手ID
 * @returns {Promise<any>}
 */
export function getSingerById(id) {
  return api.get(`/singer/${id}`).then(res => {
    if (res.code === 200 && res.data) {
      // 处理歌手头像URL
      if (res.data.avatar) {
        res.data.avatar = processImageUrl(res.data.avatar)
      }
    }
    return res
  })
}

/**
 * 获取最新歌手
 * @param {number} limit 限制数量
 * @returns {Promise<any>}
 */
export function getLatestSinger(limit = 10) {
  return api.get('/singer/latest', {
    params: { limit }
  })
}

/**
 * 添加歌手（管理员）
 * @param {Object} data 歌手数据
 * @param {File} avatar 头像文件
 * @returns {Promise<any>}
 */
export function addSinger(data, avatar) {
  const formData = new FormData()
  formData.append('singer', new Blob([JSON.stringify(data)], { type: 'application/json' }))

  if (avatar) {
    formData.append('avatar', avatar)
  }

  return api.post('/singer/add', formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 更新歌手（管理员）
 * @param {number} id 歌手ID
 * @param {Object} data 歌手数据
 * @param {File} avatar 头像文件
 * @returns {Promise<any>}
 */
export function updateSinger(id, data, avatar) {
  const formData = new FormData()
  formData.append('singer', new Blob([JSON.stringify(data)], { type: 'application/json' }))

  if (avatar) {
    formData.append('avatar', avatar)
  }

  return api.put(`/singer/${id}`, formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 删除歌手（管理员）
 * @param {number} id 歌手ID
 * @returns {Promise<any>}
 */
export function deleteSinger(id) {
  return api.delete(`/singer/${id}`)
}

/**
 * 收藏歌手
 * @param {number} id 歌手ID
 * @returns {Promise<any>}
 */
export function collectSinger(id) {
  return api.post(`/singer/${id}/collect`)
}

/**
 * 取消收藏歌手
 * @param {number} id 歌手ID
 * @returns {Promise<any>}
 */
export function uncollectSinger(id) {
  return api.delete(`/singer/${id}/collect`)
}

/**
 * 获取收藏的歌手列表
 * @param {number} page 页码
 * @param {number} size 每页大小
 * @returns {Promise<any>}
 */
export function getCollectedSinger(page = 1, size = 10) {
  return api.get('/singer/collect', {
    params: {
      page,
      size
    }
  })
}

/**
 * 搜索歌手
 * @param {string} keyword 搜索关键词
 * @param {number} page 页码
 * @param {number} size 每页大小
 * @returns {Promise<any>}
 */
export function searchSinger(keyword, page = 1, size = 10) {
  return api.get('/singer/search', {
    params: {
      keyword,
      page,
      size
    }
  }).then(res => {
    if (res.code === 200 && res.data) {
      // 处理数据结构
      const records = res.data.records || res.data.list || []

      // 处理头像URL
      const processedRecords = records.map(item => ({
        ...item,
        avatar: processImageUrl(item.avatar)
      }))

      if (res.data.records) {
        res.data.records = processedRecords
      } else if (res.data.list) {
        res.data.list = processedRecords
      } else {
        res.data = processedRecords
      }
    }
    return res
  })
}

/**
 * 获取热门歌手
 * @param {number} limit 限制数量
 * @returns {Promise<any>}
 */
export function getHotSinger(limit = 10) {
  return api.get('/singer/hot-list', {
    params: { limit }
  }).then(res => {
    if (res.code === 200 && res.data) {
      // 处理头像URL
      res.data = res.data.map(item => ({
        ...item,
        avatar: processImageUrl(item.avatar)
      }))
    }
    return res
  })
}

/**
 * 收藏/取消收藏歌手
 * @param {number} id 歌手ID
 * @param {boolean} isCollected 当前是否收藏
 * @returns {Promise<any>}
 */
export function toggleCollectSinger(id, isCollected) {
  if (isCollected) {
    return api.delete(`/singer/${id}/collect`)
  } else {
    return api.post(`/singer/${id}/collect`)
  }
}

/**
 * 检查当前用户是否收藏了该歌手
 * @param {number} id 歌手ID
 * @returns {Promise<any>}
 */
export function isSingerCollected(id) {
  return api.get(`/singer/${id}/is-collected`)
}

/**
 * 添加音乐到歌手
 * @param {number} singerId 歌手ID
 * @param {number} musicId 音乐ID
 * @returns {Promise<any>}
 */
export function addMusicToSinger(singerId, musicId) {
  return api.post(`/singer/${singerId}/music/${musicId}`)
}

/**
 * 从歌手移除音乐
 * @param {number} singerId 歌手ID
 * @param {number} musicId 音乐ID
 * @returns {Promise<any>}
 */
export function removeMusicFromSinger(singerId, musicId) {
  return api.delete(`/singer/${singerId}/music/${musicId}`)
}
