package com.kxs.product.biz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kxs.common.core.util.R;
import com.kxs.product.api.dto.kxsapp.GetActivityMachineByIdAndTimeDTO;
import com.kxs.product.api.dto.kxsapp.machine.*;
import com.kxs.product.api.model.KxsMachine;
import com.kxs.product.api.vo.kxsapp.machine.*;
import com.kxs.stat.api.vo.GetActivityStatByIdAndTimeVO;

import java.util.List;

/**
 * 客小爽机具表(KxsMachine)表服务接口
 *
 * @author 系统
 * @since 2023-12-20 10:09:35
 */
public interface KxsMachineService extends IService<KxsMachine> {

    /**
     * 仓库库存机具列表
     *
     * @param page  页
     * @param param 参数
     * @return {@link IPage}<{@link MachineStoreListVO}>
     */
    IPage<MachineStoreListVO> machineStoreList(Page<MachineStoreListVO> page, MachineStoreListDTO param);

    /**
     * 机具搜索
     *
     * @param page  页
     * @param param 参数
     * @return {@link IPage}<{@link MachineStoreListVO}>
     */
    IPage<MachineStoreListVO> searchStoreMachine(Page<MachineStoreListVO> page, MachineStoreListDTO param);

    /**
     * 可循环机列表
     *
     * @param page    页
     * @param brandType
     * @return {@link IPage}<{@link RecycleMachinesVO}>
     */
    IPage<RecycleMachinesVO> recycleMachinesPage(Page<RecycleMachinesVO> page, Integer brandType);

    /**
     * 未绑定机具列表
     *
     * @param page  页
     * @param param 参数
     * @return {@link IPage}<{@link MachineUnBindListVO}>
     */
    IPage<MachineUnBindListVO> machineUnBindListPage(Page<MachineUnBindListVO> page, MachineUserListDTO param);

    /**
     * 已绑定列表
     *
     * @param page  页
     * @param param 参数
     * @return {@link IPage}<{@link MachineBindListVO}>
     */
    IPage<MachineBindListVO> machineBindList(Page<MachineBindListVO> page, MachineUserListDTO param);

    /**
     * 全部机具
     *
     * @param page  页
     * @param param 参数
     * @return {@link IPage}<{@link MachineUserListVO}>
     */
    IPage<MachineUserListVO> getByPage(Page<MachineUserListVO> page, MachineUserListDTO param);

    /**
     * 申请机具说明
     *
     * @return {@link MachineApplyRemarkVO}
     */
    MachineApplyRemarkVO applyRemark();

    /**
     * 机具未绑定划拨
     *
     * @param param 参数
     * @return {@link R}
     */
    R machineTransferUser(MachineTransferDTO param);


    /**
     * 用户机具和箱具码搜索
     *
     * @param page  页
     * @param param 参数
     * @return {@link IPage}<{@link SearchUserMachineVO}>
     */
    IPage<SearchUserMachineVO> searchUserMachine(Page<SearchUserMachineVO> page, SearchUserMachineDTO param);

    /**
     * 机具可回收列表
     *
     * @param page  页
     * @param param
     * @return {@link IPage}<>
     */
    IPage<MachineRecycleListVO> recycleList(Page<MachineRecycleListVO> page, RecycleMachineQuery param);


    /**
     * 循环过期机具列表
     *
     * @return {@link ExpiredModalBrandVO}
     */
    List<ExpiredModalBrandVO> expiredModal();

    /**
     * 循环过期机具添加预扣款
     *
     * @param para 段落
     */
    void recycleMachineSchedule(String para);

    /**
     * 可回收机具品牌列表
     *
     * @return 机具可回收列表
     */
    Object recycleBrandList();

    /**
     * 查询激活和绑定在指定区间的机具数
     * @param param
     * @return
     */
    GetActivityStatByIdAndTimeVO getActivityMachineByIdAndTime(GetActivityMachineByIdAndTimeDTO param);


    /**
     * 机具修改活动
     *
     * @param param 参数
     * @return {@link R}
     */
    R updatePledge(MachineUpdatePledgeDTO param);

    /**
     * 查询30分钟内绑定的机器
     *
     * @return {@link List}<{@link String}>
     */
    List<String> loadByPrePosBind30minute();


}

