import { NetworkPageData, NetworkResult } from "@core/network";
import { Goods } from "@shared/types";
import { GoodsSearchRequest } from "../models/GoodsSearchRequest";
import { GoodsNetworkDataSource } from "./datasource/GoodsNetworkDataSource";
import { GoodsNetworkDataSourceImpl } from "./datasource/GoodsNetworkDataSourceImpl";
import { IGoodsRepository } from "./IGoodsRepository";

/**
 * @file 商品相关仓库类,封装商品模块请求
 * @author Joker.X
 */
export class GoodsRepositoryImpl implements IGoodsRepository {
  /**
   * 商品网络数据源
   */
  private networkDataSource: GoodsNetworkDataSource;

  /**
   * 构造函数
   * @param networkDataSource 可选的商品网络数据源实例
   */
  constructor(networkDataSource?: GoodsNetworkDataSource) {
    this.networkDataSource = networkDataSource ?? new GoodsNetworkDataSourceImpl();
  }

  /**
   * 分页查询商品
   * @param params 商品搜索请求参数
   * @returns 商品分页数据
   */
  async getGoodsPage(params: GoodsSearchRequest): Promise<NetworkResult<NetworkPageData<Goods>>> {
    return this.networkDataSource.getGoodsPage(params);
  }

  /**
   * 获取商品信息
   * @param id 商品ID
   * @returns 商品详情
   */
  async getGoodsInfo(id: string): Promise<NetworkResult<Goods>> {
    return this.networkDataSource.getGoodsInfo(id);
  }
}