import { Goods } from "@shared/types";
import { AxiosHttpClient, NetworkPageData, NetworkResult } from "@core/network";
import { GoodsNetworkDataSource } from "./GoodsNetworkDataSource";
import { GoodsSearchRequest } from "../../models/GoodsSearchRequest";
import { CoreServiceKeys, getContainer } from "@core/di";
import { Any, Unknown } from "@core/common";

/**
 * @file 商品相关数据源实现类
 * @author Joker.X
 */
export class GoodsNetworkDataSourceImpl implements GoodsNetworkDataSource {
  /**
   * 分页查询商品
   * @param params 商品搜索请求参数
   * @returns 商品分页数据响应
   */
  async getGoodsPage(params: GoodsSearchRequest): Promise<NetworkResult<NetworkPageData<Goods>>> {
    const httpClient = getContainer().resolve<AxiosHttpClient>(CoreServiceKeys.HttpClient);
    const rawResponse: Unknown = await httpClient.post<Unknown>("goods/info/page", params);
    return new NetworkResult<NetworkPageData<Goods>>(rawResponse);
  }

  /**
   * 获取商品信息
   * @param id 商品ID
   * @returns 商品信息响应
   */
  async getGoodsInfo(id: string): Promise<NetworkResult<Goods>> {
    const httpClient = getContainer().resolve<AxiosHttpClient>(CoreServiceKeys.HttpClient);
    const rawResponse: Unknown = await httpClient.get<Unknown>("goods/info/info", { params: { id } as Any });
    return new NetworkResult<Goods>(rawResponse);
  }
}