import api from './index'

/**
 * 获取音乐列表
 * @param {number} page 页码
 * @param {number} size 每页大小
 * @param {string} keyword 关键字
 * @param {number} typeId 类型ID
 * @returns {Promise<any>}
 */
export function getMusicList(page = 1, size = 10, keyword = '', typeId = null) {
  return api.get('/music/list', {
    params: {
      page,
      size,
      keyword,
      typeId
    }
  }).then(res => {
    if (res.code === 200 && res.data) {
      // 处理数据结构
      const data = res.data
      if (data.list) {
        // 处理歌手和类型信息
        data.list.forEach(item => {
          // 处理音乐URL
          if (item.url) {
            item.url = processMusicUrl(item.url)
          }
          // 处理封面URL
          if (item.cover) {
            item.cover = processMusicUrl(item.cover)
          }
        })
      }
    }
    return res
  })
}

/**
 * 根据ID获取音乐
 * @param {number} id 音乐ID
 * @returns {Promise<any>}
 */
export function getMusicById(id) {
  return api.get(`/music/${id}`, {
    params: {
      // 添加时间戳以防止缓存
      _t: new Date().getTime()
    }
  }).then(res => {
    if (res.code === 200 && res.data) {
      // 处理音乐URL
      if (res.data.url) {
        res.data.url = processMusicUrl(res.data.url)
      }
      // 处理封面URL
      if (res.data.cover) {
        res.data.cover = processMusicUrl(res.data.cover)
      }
    }
    return res
  })
}

/**
 * 获取热门音乐
 * @param {number} limit 限制数量
 * @returns {Promise<any>}
 */
export function getHotMusic(limit = 10) {
  // 更新：调用新的热门音乐接口
  return api.get('/hot-music/list', {
    params: { limit }
  }).then(res => {
    if (res.code === 200 && res.data && Array.isArray(res.data)) {
      res.data.forEach(item => {
        if (item.cover) {
          item.cover = processMusicUrl(item.cover);
        }
        if (item.singerAvatar) {
          item.singerAvatar = processMusicUrl(item.singerAvatar);
        }
      });
    }
    return res;
  });
}

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

/**
 * 根据歌手ID获取音乐列表
 * @param {number} singerId 歌手ID
 * @param {number} page 页码
 * @param {number} size 每页大小
 * @returns {Promise<any>}
 */
export function getMusicBySinger(singerId, page = 1, size = 10) {
  return api.get(`/music/singer/${singerId}`, {
    params: {
      page,
      size
    }
  })
}

/**
 * 播放音乐
 * @param {number} id 音乐ID
 * @returns {Promise<any>}
 */
export function playMusic(id) {
  return api.post(`/music/${id}/play`)
}

/**
 * 收藏/取消收藏音乐
 * @param {number} id 音乐ID
 * @returns {Promise<any>}
 */
export function toggleCollectMusic(id) {
  return api.post(`/music/${id}/collect`)
}

/**
 * 点赞/取消点赞音乐
 * @param {number} id 音乐ID
 * @returns {Promise<any>}
 */
export function toggleLikeMusic(id) {
  return api.post(`/music/${id}/like`)
}

/**
 * 获取音乐的收藏和点赞状态
 * @param {number} id 音乐ID
 * @returns {Promise<any>}
 */
export function getMusicStatus(id) {
  return api.get(`/music/${id}/status`);
}

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

/**
 * 搜索音乐
 * @param {string} keyword 搜索关键词
 * @param {number} page 页码
 * @param {number} size 每页大小
 * @returns {Promise<any>}
 */
export function searchMusic(keyword, page = 1, size = 10) {
  return api.get('/music/search', {
    params: {
      keyword,
      page,
      size
    }
  })
}

/**
 * 添加音乐（管理员）
 * @param {Object} data 音乐数据
 * @param {File} file 音乐文件
 * @param {File} cover 封面文件
 * @returns {Promise<any>}
 */
export function addMusic(data, file, cover) {
  const formData = new FormData()
  formData.append('music', new Blob([JSON.stringify(data)], { type: 'application/json' }))

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

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

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

/**
 * 更新音乐（管理员）
 * @param {number} id 音乐ID
 * @param {Object} data 音乐数据
 * @param {File} file 音乐文件
 * @param {File} cover 封面文件
 * @param {File} lyric 歌词文件
 * @returns {Promise<any>}
 */
export function updateMusic(id, data, file, cover, lyric) {
  const formData = new FormData()
  formData.append('music', new Blob([JSON.stringify(data)], { type: 'application/json' }))

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

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

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

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

/**
 * 删除音乐（管理员）
 * @param {number} id 音乐ID
 * @returns {Promise<any>}
 */
export function deleteMusic(id) {
  return api.delete(`/music/${id}`)
}

/**
 * 处理音乐URL
 * @param {string} url 音乐URL
 * @returns {string} 处理后的URL
 */
export function processMusicUrl(url) {
  if (!url) {
    return '';
  }

  // 如果是完整URL，直接返回
  if (url.startsWith('http://') || url.startsWith('https://')) {
    return url;
  }

  // 如果是相对路径，添加API基础URL
  // 使用后端服务器地址
  const baseUrl = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8085';

  // 确保路径以/开头
  if (!url.startsWith('/')) {
    url = '/' + url;
  }

  return `${baseUrl}${url}`;
}
