import type { ServerList, ServerRes } from "~/service/index";
import httpRequest from "~/service/index";

/**
 * 全站公共接口服务。
 * 负责封装新闻、产品检索、内容展示、留言和应用领域等公共接口，
 * 供 H5 页面统一调用，保持请求入口和返回结构一致。
 */
export function useAll() {
  /**
   * 获取首页分类。
   * @returns {Promise<ServerRes<any>>} 首页分类接口响应。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function getCategory() {
    return await httpRequest.get<ServerRes<any>>(`/productCategory/findList`);
  }

  async function getCategory1() {
    return await httpRequest.get<ServerRes<any>>(`/productCategory/findList?sort=1`);
  }
  async function getCategory2() {
    return await httpRequest.get<ServerRes<any>>(`/productCategory/findList?sort=2`);
  }

  /**
   * 获取新闻列表。
   * @param {any} res 查询参数。
   * @returns {Promise<ServerList<any>>} 新闻列表接口响应。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function getNewsList(res: any) {
    return await httpRequest.post<ServerList<any>>(`/newsArticle/findPage`, res);
  }

  /**
   * 提交留言。
   * @param {any} res 留言参数。
   * @returns {Promise<ServerList<any>>} 留言接口响应。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function guestbook(res: any) {
    return await httpRequest.post<ServerList<any>>(`/guestbook/add-guestbook`, res);
  }

  /**
   * 获取商品热词联想。
   * @param {any} res 查询参数。
   * @returns {Promise<any>} 热词联想结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function selectProductHot(res: any) {
    return await httpRequest.post<any>(`/product/selectTitle`, res);
  }

  /**
   * 获取新闻详情。
   * @param {any} code 新闻 ID。
   * @returns {Promise<any>} 新闻详情接口响应。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function getNewsDetail(code: any) {
    return await httpRequest.get<any>(`/newsArticle/getById?id=${code}&language=2`);
  }

  /**
   * 获取新闻上下篇。
   * @param {any} code 新闻 ID。
   * @returns {Promise<any>} 新闻上下篇接口响应。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function getpreNext(code: any) {
    return await httpRequest.get<any>(`/newsArticle/getpreNext?id=${code}&language=2&type=1`);
  }

  /**
   * 模糊搜索产品。
   * @param {any} q 查询参数。
   * @returns {Promise<any>} 产品搜索结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function selectProductLike(q: any) {
    return await httpRequest.post<any>(`/product/search`, q);
  }

  /**
   * 获取产品映射结果。
   * @param {any} q 查询参数。
   * @returns {Promise<any>} 产品映射结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function selectFindMap(q: any) {
    return await httpRequest.post<any>(`/product/findMap`, q);
  }

  /**
   * 获取产品分类列表。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 产品分类列表接口响应。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function getGoodsgoryList(query?: any) {
    return await httpRequest.get<any>(`/productCategory/findList`, query);
  }

  /**
   * 获取展示内容。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 展示内容接口响应。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function getContent(query: any) {
    return await httpRequest.post<any>(`/show/content`, query);
  }

  /**
   * 产品搜索。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 产品搜索结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function flqSearch(query: any) {
    return await httpRequest.post<any>(`/product/search`, query);
  }

  /**
   * 获取产品映射列表。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 产品映射列表结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function flqGoodsList(query: any) {
    return await httpRequest.post<any>(`/product/findMap`, query);
  }

  /**
   * 获取筛选范围。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 筛选范围结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function flqFindScope(query: any) {
    return await httpRequest.post<any>(`/product/findScope`, query);
  }

  /**
   * 获取筛选条件上限。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 筛选条件结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function flqGetFilter(query: any) {
    return await httpRequest.get<any>(`/product/findMaxAttr`, query);
  }

  /**
   * 获取商品分页列表。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 商品分页列表结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function goodsList(query: any) {
    return await httpRequest.post<any>(`/product/findPage`, query);
  }

  /**
   * 全局搜索器件。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 器件搜索结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function esFindDevice(query: any) {
    return await httpRequest.post<any>(`/product/es-find-device`, query);
  }

  /**
   * 查询封装列表。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 封装列表结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function esFindFz(query: any) {
    return await httpRequest.get<any>(`/product/find-fz`, query);
  }

  /**
   * 查询精度列表。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 精度列表结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function esFindJd(query: any) {
    return await httpRequest.get<any>(`/product/find-jd`, query);
  }

  /**
   * 删除 BOM 订单。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 删除结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function delBomOrder(query: any) {
    return await httpRequest.post<any>(`/shop/bom/delBomOrder`, query);
  }

  /**
   * 新增留言。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 留言提交结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function addGuestbook(query: any) {
    return await httpRequest.post<any>(`/guestbook/add-guestbook`, query);
  }

  /**
   * 获取新闻上下篇。
   * @param {any} id 新闻 ID。
   * @returns {Promise<any>} 新闻上下篇结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function getPreNext(id: any) {
    return await httpRequest.get<any>(`/newsArticle/getpreNext?id=${id}&language=2&type=1`);
  }

  /**
   * 获取应用领域列表。
   * @param {any} query 查询参数。
   * @returns {Promise<any>} 应用领域列表结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function getApplicationList(query: any) {
    return await httpRequest.post<any>(`/newsArticle/findPage`, query);
  }

  /**
   * 获取应用领域详情。
   * @param {any} id 文章 ID。
   * @returns {Promise<any>} 应用领域详情结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function getApplicationDetail(id: any) {
    return await httpRequest.get<any>(`/newsArticle/getById?id=${id}&language=2`);
  }

  /**
   * 获取应用领域上下篇。
   * @param {any} id 文章 ID。
   * @returns {Promise<any>} 应用领域上下篇结果。
   * @throws {Error} 请求失败时抛出异常。
   */
  async function getApplicationPreNext(id: any) {
    return await httpRequest.get<any>(`/newsArticle/getpreNext?id=${id}&language=2&type=1`);
  }

  async function supplierSelect(query: any) {
    return await httpRequest.post<any>(`/supplierSelect/findByPage?companyName=${query.companyName}`, query);
  }

  //首页资质专利
  async function menuContent() {
    return await httpRequest.post<any>(`/menuContent/queryList`, {
      "menuId": "7"
    });
  }

  async function devHistory() {
    return await httpRequest.post<any>(`/devHistory/findAll`, {});
  }

  return {
    getNewsList,
    selectProductLike,
    selectProductHot,
    getNewsDetail,
    getpreNext,
    getCategory,
    getCategory1,
    getCategory2,
    guestbook,
    selectFindMap,
    getGoodsgoryList,
    getContent,
    flqSearch,
    flqGoodsList,
    flqFindScope,
    flqGetFilter,
    goodsList,
    esFindDevice,
    esFindFz,
    esFindJd,
    delBomOrder,
    addGuestbook,
    getPreNext,
    getApplicationList,
    getApplicationDetail,
    getApplicationPreNext,
    supplierSelect,
    menuContent,
    devHistory
  };
}
