package com.younike.system.service;

import com.younike.common.core.domain.AjaxResult;
import com.younike.system.domain.Goods;
import com.younike.system.domain.vo.GoodsFormVO;
import com.younike.system.domain.vo.GoodsServerVO;
import com.younike.system.domain.vo.GoodsVo;
import com.younike.system.domain.vo.MerchantGoodsVo;
import com.younike.system.param.GoodsParam;
import com.younike.system.param.GoodsQueryParam;
import com.younike.system.param.GroupGoodsAddParam;

import java.util.List;

/**
 * 商品Service接口
 *
 * @author elev
 * @date 2022-01-06
 */
public interface IGoodsService {

    /**
     * 查询商品列表
     *
     * @param param 商品
     * @return 商品集合
     */
    List<GoodsVo> pageList(GoodsQueryParam param);
    /**
     * 商品信息保存
     * @param goodsFormVO
     * @return
     */
    int save(GoodsFormVO goodsFormVO);

    /**
     * 查询商品明细
     * @param goodsId
     * @return
     */
    GoodsFormVO detail(Long goodsId);

    /**
     * 查询商品
     *
     * @param goodsId 商品主键
     * @return 商品
     */
    Goods selectGoodsByGoodsId(Long goodsId);

    /**
     * 查询商品列表
     *
     * @param goods 商品
     * @return 商品集合
     */
    List<Goods> selectGoodsList(Goods goods);

    /**
     * 新增商品
     *
     * @param goods 商品
     * @return 结果
     */
    int insertGoods(Goods goods);

    /**
     * 修改商品
     *
     * @param goods 商品
     * @return 结果
     */
    int updateGoods(Goods goods);

    /**
     * 批量删除商品
     *
     * @param goodsIds 需要删除的商品主键集合
     * @return 结果
     */
    int deleteGoodsByGoodsIds(Long[] goodsIds);

    /**
     * 删除商品信息
     *
     * @param goodsId 商品主键
     * @return 结果
     */
    int deleteGoodsByGoodsId(Long goodsId);

    List<Goods> list(Goods goods);

    int remove(Long goodsId);

    AjaxResult onShelf(Long goodsId);

    int offShelf(Long goodsId);
    AjaxResult merchantGoods(GoodsParam goods);

    /**
     * 首页：服务员主页
     * @param goods
     * @return
     */
    AjaxResult serverGoods(GoodsParam goods);

    /**
     * 搜索服务人员
     * @param goods
     * @return
     */
    List<GoodsVo> seekCrewList(GoodsParam goods);

    /**
     * 搜索商家
     *
     * @param goods
     * @return
     */
    List<GoodsVo> seekMerchantList(GoodsParam goods);

    /**
     * 运营端
     * 删除服务
     *
     * @param goods
     * @return
     */
    AjaxResult adminDeleteGoods(Goods goods);

    /**
     * 店铺管理
     * 删除服务
     *
     * @param goodsId
     * @return
     */
    AjaxResult merchantRemove(Long goodsId);

    /**
     * \
     * 查询服务人员是否有关联的上架的服务（如果有，校验服务是否只有这一个要删除的服务人员）
     *
     * @param serverIds
     * @return
     */
    List<GoodsVo> merchanServerUserId(Long[] serverIds);

    /**
     * 运营端：服务上架
     *
     * @param goods
     * @return
     */
    AjaxResult adminTakeOn(Goods goods);

    /**
     * 新增团购商品
     *
     * @param groupGoodsAddParam
     * @return
     */
    AjaxResult saveGroupGoods(GroupGoodsAddParam groupGoodsAddParam);

    /**
     * 查询团购服务列表
     *
     * @param goods
     * @return
     */
    List<GoodsVo> listGroupGoods(Goods goods);

    /**
     * 查询团购服务详情
     *
     * @param goodsId
     * @return
     */
    GoodsVo getGroupGoodsDetail(Long goodsId);

    /**
     * 上架团购服务
     *
     * @param goods
     * @return
     */
    AjaxResult onShelfGroupGoods(Goods goods);

    /**
     * 首页：团购商品列表
     *
     * @param goods
     * @return
     */
    List<GoodsVo> seekGroupList(GoodsParam goods);

    /**
     * 首页：团购次卡主页
     *
     * @param goods
     * @return
     */
    AjaxResult groupGoods(GoodsParam goods);

    /**
     * 会员端：搜索：商家:查询商家(团购、预售)列表
     *
     * @param goods
     * @return
     */
    List<MerchantGoodsVo> seekMerchantGoodsList(GoodsParam goods);

    /**
     * 批量更新服务数据，订单时统计好评率成交量评分
     *
     * @param goodsList
     */
    void updateGoodsList(List<Goods> goodsList);

    AjaxResult goodsVerify(GoodsServerVO goods);
}
