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

/**
 * 获取轮播图列表
 * @returns {Promise<any>}
 */
export function getBannerList() {
  return api.get('/banner/list').then(res => {
    if (res.code === 200 && res.data) {
      // 处理数据格式，适配后端返回的数据结构
      // 如果有 data.list，则使用 data.list 作为记录列表
      const banners = res.data.list || res.data;

      // 处理图片URL
      const processedBanners = Array.isArray(banners) ? banners.map(banner => ({
        ...banner,
        imageUrl: processImageUrl(banner.imageUrl)
      })) : [];

      // 替换原来的数据
      if (res.data.list) {
        res.data.list = processedBanners;
      } else {
        res.data = processedBanners;
      }
    }
    return res;
  });
}



/**
 * 分页获取轮播图列表
 * @param {number} page 页码
 * @param {number} size 每页大小
 * @returns {Promise<any>}
 */
export function getBannerPage(page = 1, size = 10) {
  return api.get('/banner/page', {
    params: {
      page,
      size
    }
  }).then(res => {
    if (res.code === 200 && res.data) {
      // 处理数据格式，适配后端返回的数据结构
      // 如果有 data.list，则使用 data.list 作为记录列表
      const records = res.data.list || res.data.records || [];
      const total = res.data.total || 0;

      // 处理图片URL
      const processedRecords = records.map(banner => ({
        ...banner,
        imageUrl: processImageUrl(banner.imageUrl)
      }));

      // 构造标准的分页响应格式
      res.data = {
        records: processedRecords,
        total: total,
        current: res.data.page || page,
        size: res.data.size || size,
        pages: res.data.totalPages || Math.ceil(total / size)
      };
    }
    return res;
  });
}

/**
 * 根据ID获取轮播图
 * @param {number} id 轮播图ID
 * @returns {Promise<any>}
 */
export function getBannerById(id) {
  return api.get(`/banner/${id}`).then(res => {
    if (res.code === 200 && res.data) {
      // 处理图片URL
      res.data.imageUrl = processImageUrl(res.data.imageUrl)
    }
    return res
  })
}

/**
 * 添加轮播图
 * @param {Object} data 轮播图数据
 * @param {File} image 图片文件
 * @returns {Promise<any>}
 */
export function addBanner(data, image) {
  const formData = new FormData()
  formData.append('banner', new Blob([JSON.stringify(data)], { type: 'application/json' }))
  formData.append('image', image)

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

/**
 * 更新轮播图
 * @param {number} id 轮播图ID
 * @param {Object} data 轮播图数据
 * @param {File} image 图片文件
 * @returns {Promise<any>}
 */
export function updateBanner(id, data, image) {
  const formData = new FormData()
  formData.append('banner', new Blob([JSON.stringify(data)], { type: 'application/json' }))

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

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

/**
 * 删除轮播图
 * @param {number} id 轮播图ID
 * @returns {Promise<any>}
 */
export function deleteBanner(id) {
  return api.delete(`/banner/${id}`)
}

/**
 * 更新轮播图状态
 * @param {number} id 轮播图ID
 * @param {number} status 状态，0-禁用，1-启用
 * @returns {Promise<any>}
 */
export function updateBannerStatus(id, status) {
  return api.put(`/banner/${id}/status`, null, {
    params: {
      status
    }
  })
}

/**
 * 更新轮播图排序
 * @param {number} id 轮播图ID
 * @param {number} orderNum 排序号
 * @returns {Promise<any>}
 */
export function updateBannerOrder(id, orderNum) {
  return api.put(`/banner/${id}/order`, null, {
    params: {
      orderNum
    }
  })
}
