package jnpf.cultivate.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import jnpf.base.UserInfo;
import jnpf.model.cultivate.dto.offline.*;
import jnpf.model.cultivate.po.offline.FtbCultivateOfflineTrain;
import jnpf.model.cultivate.vo.offline.*;

import java.util.List;

public interface FtbCultivateOfflineTrainService extends IService<FtbCultivateOfflineTrain> {


    /**
     * 添加线下培训
     *
     * @param ftbCultivateCourseDTO 线下培训参数
     */
    void add(FtbCultivateOfflineTrainDTO ftbCultivateCourseDTO);

    /**
     * 培训结果变更
     *
     * @param userInfo 用户信息对象
     * @param ftbCultivateCourseDTO 培训结果变更参数
     */
    void updateTrainingResults(UserInfo userInfo, FtbCultivateOfflineTrainUpdateDTO ftbCultivateCourseDTO);

    /**
     * 线下培训编辑时详情
     *
     * @param id 线下培训主键id
     */
    FtbCultivateOfflineTrainDetailsVO courseDetails(String id);

    /**
     * 分页查询线下培训信息列表
     *
     * @param page      分页对象，用于指定分页查询的页码、每页数量等信息
     * @param keywords  关键字，用于根据一定条件过滤培训信息
     * @return 返回分页查询的结果，包含经过筛选的线下培训信息列表
     *
     */
    Page<FtbCultivateOfflineTrainPageVO> listPage(Page<FtbCultivateOfflineTrainPageVO> page, String keywords);

    /**
     * 线下培训详情
     * @param id 线下培训id
     */
    FtbCultivateOfflineTrainDetailsAppVO offlineAppDetails(String id);

    /**
     * app线下培训分页
     * @param page 分页对象
     * @param type type 查询类型，不传为全部培训，1为我发起的，2为我参与的，3为我负责的
     */
    Page<FtbOfflineTrainingAppPageVO> offlineTrainingApp(Page<FtbOfflineTrainingAppPageVO> page, Integer type);

    /**
     * 删除线下培训
     * @param id 线下培训id
     */
    void deleteOfflineTrain(String id);

    /**
     * 查询已有线下培训成员
     * @param id 线下培训主键id
     * @return 用户主键id
     */
    List<String> queryExistingMembers(String id);

    /**
     * 修改线下培训成员
     * @param data 线下培训参数
     */
    void modifyOfflineTrainingMembers(FtbModifyOfflineTrainingMembersDTO data);

    /**
     * 撤回
     * @param id 线下培训主键id
     */
    void withdraw(String id);

    /**
     * 线下培训签到人数分页查询
     */
    Page<FtbCultivateOfflineTrainPeopleSigningInVO> numberOfflineTraining(Page<FtbCultivateOfflineTrainPeopleSigningInVO> page, FtbCultivateOfflineTrainPeopleSigningInDTO data);

    /**
     * 编辑线下培训
     * @param ftbCultivateOfflineTrainDTO 编辑线下培训参数
     */
    void editOfflineTraining(FtbCultivateOfflineTrainChangeDTO ftbCultivateOfflineTrainDTO);

    /**
     * 线下培训签到
     * @param freightTrainSignInDTO 线下培训签到参数
     */
    void signIn(FtbCultivateOfflineTrainSignInDTO freightTrainSignInDTO);
}
