package com.fs.live.service;


import com.fs.common.core.domain.R;
import com.fs.common.core.domain.entity.SysUser;
import com.fs.company.domain.CompanyUser;
import com.fs.live.domain.LiveGoods;
import com.fs.live.vo.LiveGoodsListVo;
import com.fs.live.vo.LiveGoodsVo;

import java.util.List;
import java.util.Map;

/**
 * 直播商品Service接口
 *
 * @author fs
 * @date 2025-07-08
 */
public interface ILiveGoodsService {
    /**
     * 查询直播商品
     *
     * @param goodsId 直播商品主键
     * @return 直播商品
     */
    LiveGoods selectLiveGoodsByGoodsId(Long goodsId);

    /**
     * 查询直播商品列表
     *
     * @param liveGoods 直播商品
     * @return 直播商品集合
     */
    List<LiveGoods> selectLiveGoodsList(LiveGoods liveGoods);

    /**
     * 新增直播商品
     *
     * @param liveGoods 直播商品
     * @return 结果
     */
    int insertLiveGoods(LiveGoods liveGoods);

    /**
     * 修改直播商品
     *
     * @param liveGoods 直播商品
     * @return 结果
     */
    R updateLiveGoods(LiveGoods liveGoods);

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

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

    /**
     * 批量新增直播商品
     *
     * @param payload 包含 直播间和商品信息ids
     * @return 结果
     */
    R insertLiveGoods(Map<String, Object> payload, CompanyUser user);

    //FsStore getStoreByLiveId(Long liveId);

    /**
     * 查询直播商品列表
     *
     * @param liveGoods 直播商品
     * @return 直播商品集合
     */
    List<LiveGoodsVo> selectProductListByLiveId(LiveGoods liveGoods);
    R getStoreByLiveId(Long liveId,String key);

    int insertLiveGoodsAdmin(Map<String, Object> payload, SysUser user);

    /**
     * 批量处理商品上下架
     *
     * @param listVo 直播商品
     * @return 直播商品集合
     */
    R handleShelfOrUn(LiveGoodsListVo listVo);

    /**
     * 批量处理商品删除
     *
     * @param listVo 直播商品
     * @return 直播商品集合
     */
    R handleDeleteSelected(LiveGoodsListVo listVo);

    /**
     * 根据店铺ID查询商品列表
     */
    List<LiveGoodsVo> selectLiveGoodsListByMap(Map<String, Object> params);

    Long getStoreIdByLiveId(Long liveId);

    R handleShelfOrUnAdmin(LiveGoodsListVo listVo);

    R handleDeleteSelectedAdmin(LiveGoodsListVo listVo);

    R handleIsShowChange(LiveGoodsListVo listVo);
    LiveGoodsVo selectLiveGoodsVoByGoodsId(Long goodsId);

    LiveGoodsVo showGoods(Long liveId);

    List<LiveGoods> selectByLiveId(Long existLiveId);

    void updateLiveIsShow(Long goodsId, Long liveId);

    R getStoreByLiveId(Long liveId, String key, String userId);

    /**
     * 根据商品ID更新商品上下架状态
     * @param goodsId 商品ID
     * @param status 状态：1-上架 0-下架
     */
    void updateLiveGoodsStatus(Long goodsId, Integer status);
}
