import request from '@/axios'
import { REQUEST_BASE } from '@/constants'
import {
  categoryData,
  goodsData,
  goodsSearch,
  auditData,
  searchProductRule,
  productRule,
  productRuleValue
} from './types'
import { productDataParse } from './parseData'
export const getProductCategory = (params: {
  page?: number
  limit?: number
  pid: number
}): Promise<IResponse> => {
  return request.get({ url: `${REQUEST_BASE}/productCategory/index`, params })
}
export const addProductCategory = (data: categoryData): Promise<IResponse> => {
  return request.post({ url: `${REQUEST_BASE}/productCategory/save`, data })
}
export const delProductCategory = (id: number): Promise<IResponse> => {
  return request.post({ url: `${REQUEST_BASE}/productCategory/delete/${id}` })
}
export const putProductCategory = (data: categoryData): Promise<IResponse> => {
  return request.post({ url: `${REQUEST_BASE}/productCategory/update/${data.id}`, data })
}
export const getProduct = (params: goodsSearch): Promise<IResponse> => {
  return request.get({ url: `${REQUEST_BASE}/product/index`, params })
}
export const addProduct = (data: goodsData): Promise<IResponse> => {
  const pushData = productDataParse(data)
  return request.post({ url: `${REQUEST_BASE}/product/save`, data: pushData })
}
export const delProduct = (id: number, is_del: 0 | 1): Promise<IResponse> => {
  return request.post({ url: `${REQUEST_BASE}/product/delete/${id}`, data: { is_del } })
}
export const putProduct = (data: goodsData): Promise<IResponse> => {
  const pushData = productDataParse(data)
  return request.post({ url: `${REQUEST_BASE}/product/update/${data.id}`, data: pushData })
}
export const postProductStatus = (id: number, status: number): Promise<IResponse> => {
  return request.post({
    url: `${REQUEST_BASE}/product/status/${id}`,
    data: {
      status
    }
  })
}

/**
 * 提交产品审核请求
 *
 * @param data 包含产品审核信息的对象，包括产品的验证状态和拒绝原因
 * @returns 返回一个Promise，解析为API响应对象
 *
 * 此函数向服务器发送一个POST请求，以审核产品信息它需要审核数据对象，
 * 其中包含产品的验证状态(is_verify)和如果产品被拒绝的原因(refusal)请求的URL
 * 是动态构建的，包含产品ID
 */
export const postProductAudit = (data: auditData): Promise<IResponse> => {
  return request.post({
    url: `${REQUEST_BASE}/product/audit/${data.id}`,
    data: {
      is_verify: data.is_verify,
      refusal: data.refusal
    }
  })
}
/**
 * 获取产品详细信息
 *
 * 此函数通过发送GET请求来获取指定产品的详细信息，包括商店信息和产品价值等数据
 * 它接受一个产品ID作为参数，并返回一个Promise对象，该对象解析为包含产品详细信息的响应
 *
 * @param id 产品的唯一标识符，用于指定需要获取详细信息的产品
 * @returns 返回一个Promise对象，解析为接口IResponse的实现，包含商品信息和产品价值数组
 */
export const getProductDetail = (
  id: any
): Promise<
  IResponse<{
    storeInfo: any
    productValue: any[]
    productAttr: any[]
  }>
> => {
  return request.get({
    url: `${REQUEST_BASE}/product/read/${id}`
  })
}

/**
 * 获取产品规格信息
 *
 * 通过发送GET请求来获取指定名称的产品规格信息这个函数级别的注释解释了函数的目的和工作方式
 *
 * @param name 产品规格的名称，用于查询特定的产品规格
 * @returns 返回一个Promise，解析为包含响应数据的IResponse对象
 */
export const getProductRule = (params: searchProductRule): Promise<IResponse> => {
  return request.get({
    url: `${REQUEST_BASE}/product_rule/index`,
    params
  })
}
export const addProductRule = (data: productRule): Promise<IResponse> => {
  return request.post({
    url: `${REQUEST_BASE}/product_rule/save`,
    data
  })
}
export const putProductRule = (data: productRule): Promise<IResponse> => {
  return request.put({
    url: `${REQUEST_BASE}/product_rule/update/${data.id}`,
    data
  })
}
export const delProductRule = (id: number): Promise<IResponse> => {
  return request.delete({
    url: `${REQUEST_BASE}/product_rule/delete/${id}`
  })
}
export const getProductRuleDetail = (id: number): Promise<IResponse> => {
  return request.get({
    url: `${REQUEST_BASE}/product_rule/read/${id}`
  })
}
export const getAttrSelectList = (id: number, attrs: productRuleValue[]): Promise<IResponse> => {
  return request.post({
    url: `${REQUEST_BASE}/product/is_format_attr/${id}`,
    data: { attrs }
  })
}
