package com.yida.data.school.transaction.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yida.data.common.core.entity.apply.EduProduct;
import com.yida.data.school.dto.transaction.ListBuyStudentDTO;
import com.yida.data.school.dto.transaction.ProductSelectDTO;
import com.yida.data.school.vo.transcation.EduProductNoticeVO;
import com.yida.data.school.vo.transcation.ProductWithStudentVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface EduProductMapper extends BaseMapper<EduProduct> {


    /**
     * 已使用
     *
     * @param
     * @return
     */
    List<ProductWithStudentVO> listUsingProduct(@Param("studentIds") List<Long> studentIds,
                                                @Param("schoolId") Long schoolId,
                                                @Param("now") LocalDateTime now);

    /**
     * 未使用
     *
     * @param
     * @return
     */
    List<EduProduct> selectProduct(@Param("studentIds") List<Long> studentIds,
                                   @Param("schoolId") Long schoolId,
                                   @Param("now") LocalDateTime now);

    /**
     * 商品and应用查询
     *
     * @param productId
     * @return
     */
    EduProduct selectProductAndApply(Long productId);


    /**
     * 查询商品列表
     *
     * @param productSelectDTO
     * @return
     */
    IPage<EduProduct> selectProductPageList(Page page,
                                            @Param("dto") ProductSelectDTO productSelectDTO,
                                            @Param("schoolIds") List<Long> schoolIds);

    /**
     * 更新商品库存
     *
     * @param productId 商品id
     * @param num       商品更新的数量(大于0未减库存，小于0为加库存)
     */
    void updateProductStock(@Param("productId") Long productId,
                            @Param("num") Long num);

    /**
     * 查询商品详情
     */
    EduProduct getInfo(Long id);

    /**
     * 查询包含该种类的商品
     *
     * @param firstCategory
     * @param schoolId
     * @return
     */
    List<EduProduct> listOneCategoryProduct(@Param("firstCatrgory") String firstCategory,
                                            @Param("secondCategory") String secondCategory,
                                            @Param("schoolId") Long schoolId);

    /**
     * 查询已购买学生列表
     *
     * @param page
     * @param dto
     * @return 分页已购学生
     */
    Page<EduProductNoticeVO> listBuyStudent(Page page, @Param("dto") ListBuyStudentDTO dto);

    /**
     * 查询已购买学生列表
     *
     * @param dto
     * @return 全部已购买学生
     */
    List<EduProductNoticeVO> listBuyStudent(@Param("dto") ListBuyStudentDTO dto);

    List<EduProductNoticeVO> getMaxTime(@Param("notBuyId") List<Long> notBuyId, @Param("productId") Long productId);

    /**
     * 查询最近的一个过期应用
     *
     * @param productId
     * @return
     */

    LocalDateTime getMinTime(@Param("productId") Long productId);

    void productMonitor();

    /**
     * 查询范围内未购买学生得id
     *
     * @param studentIds
     * @param productId
     * @return
     */
    List<Long> findNotBuyStudent(@Param("studentIds") List<Long> studentIds, @Param("productId") Long productId);
}