package com.seer.teach.mall.good.service;

import com.alicp.jetcache.anno.CacheInvalidate;
import com.alicp.jetcache.anno.CacheType;
import com.alicp.jetcache.anno.Cached;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.seer.teach.common.enums.EntityDeleteFlagEnums;
import com.seer.teach.mall.entity.GoodsEntity;
import com.seer.teach.mall.request.GoodsAuditReq;
import com.seer.teach.mall.request.GoodsReq;
import com.seer.teach.mall.response.GoodsResp;

import java.util.List;

/**
 * <p>
 *  商城商品服务类
 * </p>
 *
 * @author Sir-G
 * @since 2025-06-12
 */
public interface IAdminGoodsService {


    /**
     * 分页查询
     * @param size 每页的数量
     * @param current 当前页
     * @param goods 查询条件
     * @return 分页后的列表数据
     */
    IPage<GoodsEntity> queryPageList(Integer size, Integer current, GoodsEntity goods);

    /**
     * 查询商品信息
     * @param id 主键
     * @return
     */
    /*@Cached(name = "goods", expire = 60 * 60 * 24, key = "#id",cacheType = CacheType.BOTH)*/
    GoodsResp queryDetail(Integer id);

    /**
     * 从商品回收站恢复
     * @param ids 多个商品id
     * @return true表示成功，false表示失败
     */
    boolean back(List<Integer> ids);

    /**
     * 上架
     * @param ids 多个商品id
     * @return true表示成功，false表示失败
     */
    boolean enSale(List<Integer> ids);

    /**
     * 下架
     * @param ids 多个商品id
     * @return true表示成功，false表示失败
     */
    boolean unSale(List<Integer> ids);

    /**
     * 根据主键id批量更新删除标记
     * @param deleteFlagEnums 0:表示未删除，1：表示删除
     * @param ids 主键集合
     * @return 批量更新影响的行数，大于0表示成功，否则更新失败
     */
    /*@CacheInvalidate(name = "goods",key = "#ids",multi = true)*/
    int updateDeleteBatchByIds(EntityDeleteFlagEnums deleteFlagEnums, List<Integer> ids);

    /**
     * 新增商品信息
     * @param params 新增参数
     * @return 新增成功结果，true表示成功，否则新增失败
     */
    boolean saveGoods(GoodsReq params);

    /**
     * 修改商品信息
     *
     * @param id 主键
     * @param goods 修改参数
     * @return 修改成功的结果，true表示成功，否则修改失败
     */
    /*@CacheInvalidate(name = "goods",key = "#id")*/
    boolean update(Integer id, GoodsReq goods);

    /**
     * 修改商品基本信息
     *
     * @param id 主键
     * @param goods 修改参数
     * @return 修改成功的结果，true表示成功，否则修改失败
     */
    /*@CacheInvalidate(name = "goods",key = "#id")*/
    boolean updateBaseInfo(Integer id, GoodsReq goods);

    /**
     * 审核商品
     *
     * @param goodsAuditReq 请求参数，包含商品id集合,审核状态（1-审核通过，2-审核拒绝） 审核备注
     * @return 审核成功结果，true表示成功，否则审核失败
     */
    boolean auditGoods(GoodsAuditReq goodsAuditReq);

    /**
     * 根据商品id集合批量查询商品信息
     *
     * @param goodsIds 商品id集合
     * @return 商品信息列表
     */
    List<GoodsEntity> listByIds(List<Integer> goodsIds);
}
