package com.kxs.store.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.store.api.dto.kxsapp.storeRecycle.RecycleConfirmDTO;
import com.kxs.store.api.dto.kxsapp.storeRecycle.RecycleSubmitDTO;
import com.kxs.store.api.dto.kxsapp.storeRecycle.StoreRecycleMachineListDTO;
import com.kxs.store.api.dto.kxsapp.storeRecycle.UserReturnRecycleDTO;
import com.kxs.store.api.model.KxsMachineRecycle;
import com.kxs.store.api.model.KxsMachineRecycleInfo;
import com.kxs.store.api.vo.kxsapp.storeRecycle.*;

import java.util.List;

/**
 * 客小爽仓库机具回收申请表(KxsMachineRecycle)表服务接口
 *
 * @author 系统
 * @since 2024-01-08 09:46:02
 */
public interface KxsMachineRecycleService extends IService<KxsMachineRecycle> {

    /**
     * 待回收机具-列表
     *
     * @param page  页
     * @param param 参数
     * @return {@link IPage}<{@link StoreRecycleMachineListVO}>
     */
    IPage<StoreRecycleMachineListVO> getByPage(Page<StoreRecycleMachineListVO> page, StoreRecycleMachineListDTO param);

    /**
     * 确认收货
     *
     * @param param 参数
     * @return {@link R}
     */
    R confirm(RecycleConfirmDTO param);

    /**
     * 数量接口
     *
     * @return {@link StoreRecycleDataVO}
     */
    StoreRecycleDataVO recycleCount();

    /**
     * 驳回订单
     *
     * @param param 参数
     * @return {@link R}
     */
    R cancel(RecycleConfirmDTO param);

    /**
     * 机具回收-用户机具寄回
     *
     * @param param 参数
     * @return {@link R}
     */
    R userSubmit(RecycleSubmitDTO param);

    /**
     * 用户寄回记录
     *
     * @param page 页
     * @return {@link IPage}<{@link RecycleUserListVO}>
     */
    IPage<RecycleUserListVO> userList(Page<RecycleUserListVO> page);

    /**
     * 机具回收-待确认列表
     *
     * @param page    页
     * @param brandId 品牌 ID
     * @return {@link IPage}<{@link NeedConfirmRecycleVO}>
     */
    IPage<NeedConfirmRecycleVO> needConfirmList(Page<NeedConfirmRecycleVO> page, Integer brandId);

    /**
     * 可回收数量接口
     *
     * @return {@link recoverableDataVO}
     */
    recoverableDataVO recoverableData();

    /**
     * 用户撤回回收
     *
     * @param userReturnRecycleDTO SN列表
     * @return {@link R}
     */
    R userReturnRecycle(UserReturnRecycleDTO userReturnRecycleDTO);

    /**
     * 用户机具回收列表
     *
     * @return {@link List}<{@link KxsMachineRecycleInfo}>
     */
    List<String> recycleSnList();
}

