package com.ghy.goods.service;

import com.ghy.goods.domain.Goods;
import com.ghy.goods.request.AppGoodsRequest;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;

/**
 * 商品模块接口
 *
 * @author clunt
 */
public interface GoodsService {

    /**
     * @param goods 师傅端新增商品
     * @return  新增成功条数
     */
    int addGoods(Goods goods);

    /**
     * @param goodsList 需要校验库存的商品list
     * @return 校验结果
     */
    boolean checkStore(List<AppGoodsRequest> goodsList);

    /**
     * @param goodsList 需要校验库存的商品list
     * @return 商品总价
     */
    BigDecimal calculate(List<AppGoodsRequest> goodsList);

    /**
     * @param goods 商品属性
     * @return 成功条数
     */
    int insertGoods(Goods goods);

    /**
     * @param goods 商品属性
     * @return 成功条数
     */
    int updateGoods(Goods goods);

    /**
     * @param goods 商品入参
     * @return 商品集合
     */
    List<Goods> selectGoodsList(Goods goods);


    /**
     * @param goodsId 商品id
     * @return 商品
     */
    Goods selectById(Long goodsId);

    /**
     * @param ids 商品ids
     * @return 删除结果
     */
    int deleteGoodsByIds(String ids);

    /**
     * 校验商品名称是否重复
     *
     * @param goods 商品属性
     * @return 校验结果 1存在 0不存在
     */
    String checkGoodsNameUnique(Goods goods);

    /**
     * 校验商品编码是否重复
     *
     * @param goods 商品属性
     * @return 校验结果 1存在 0不存在
     */
    String checkGoodsCodeUnique(Goods goods);

    /**
     * 用商品ID批量查询
     *
     * @param ids 商品ID
     */
    List<Goods> selectByIds(Collection<Long> ids);

    /**
     * 用第三级类目ID批量查询
     *
     * @param ids 类目ID
     */
    List<Goods> selectByCategoryIds(Collection<Long> ids);

    int edit(Goods goods);

    /**
     * 通过商品ID查找其服务类目，然后通过服务类目的四级类目查询所有相关商品
     *
     * @param goodsId 商品ID
     * @return 相关商品列表（只包含上架商品）
     */
    List<Goods> selectGoodsByServiceCategory(Long goodsId);

}
