package com.kxs.store.biz.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.kxs.store.api.model.KxsMachineAdvance;
import com.kxs.store.api.vo.kxsapp.store.StoreAdvanceMachineVO;
import com.kxs.store.api.vo.kxsapp.storeAdvance.UserWarehouseListVO;
import com.kxs.store.api.vo.kxsapp.userAdvance.AdvanceDevModalVO;
import com.kxs.store.api.vo.kxsapp.userAdvance.UserAdvanceListVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * 客小爽预发机表(KxsMachineAdvance)表数据库访问层
 *
 * @author 系统
 * @since 2024-01-08 09:46:02
 */
@Mapper
public interface KxsMachineAdvanceMapper extends BaseMapper<KxsMachineAdvance> {

    /**
     * 仓库预发机分页列表
     *
     * @param page        页
     * @param warehouseId 仓库 ID
     * @param brandId     品牌
     * @return {@link IPage}<{@link StoreAdvanceMachineVO}>
     */
    IPage<StoreAdvanceMachineVO> getByPage(Page<StoreAdvanceMachineVO> page, @Param("warehouseId") Integer warehouseId, @Param("brandId") Integer brandId);

    /**
     * 查询仓库用户下的所有小分仓用户
     *
     * @param page   页
     * @param userId 用户 ID
     * @return {@link IPage}<{@link UserWarehouseListVO}>
     */
    IPage<UserWarehouseListVO> getUserWareHouseList(Page<UserWarehouseListVO> page, @Param("userId") Long userId, @Param("keyword") String keyword);

    /**
     * 查询用户预发机数量 未确认和已确认 未申请的
     *
     * @param userId 用户ID
     * @return {@link Long}
     */
    Long selectUserByCount(Integer userId);

    /**
     * 查询仓库用户下所有用户的预发机
     *
     * @param sendUserId 发送用户 ID
     * @param toUserId   到用户 ID
     * @param keyword
     * @return {@link List}<{@link Map}<{@link String}, {@link Object}>>
     */
    List<Map<String, Object>> selectToUserList(@Param("sendUserId") Long sendUserId, @Param("toUserId") Integer toUserId, @Param("keyword") String keyword);

    /**
     * 查询用户下所有的待确认预发机
     *
     * @param userId 用户 ID
     * @return {@link List}<{@link AdvanceDevModalVO}>
     */
    List<AdvanceDevModalVO> selectToUserNeedConfirmList(Long userId);

    /**
     * 用户预发机列表
     *
     * @param userId 用户ID
     * @return {@link IPage}<{@link UserAdvanceListVO}>
     */
    List<UserAdvanceListVO> advanceUserList(Long userId);

    /**
     * 仓库预发机数量
     *
     * @param warehouseId 仓库 ID
     * @return {@link Long}
     */
    Long selectWarehouseUserCount(Integer warehouseId);

    /**
     * 选择最大天数预超时
     *
     * @param userId 用户 ID
     * @return {@link Integer}
     */
    Integer selectMaxDayPreTimeout(Long userId);

}

