package jnpf.cultivate.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fantaibao.permission.annotation.DataScope;
import com.fantaibao.permission.enums.FilterWhereTypeEnum;
import jnpf.entity.cultivate.TeachingRecord;
import jnpf.model.cultivate.dto.teaching.*;
import jnpf.model.cultivate.v2.teaching.vo.StoreTeachingVo;
import jnpf.model.cultivate.v2.teaching.vo.TeachingDetailVo;
import jnpf.model.cultivate.v2.teaching.vo.V2TeachingRecordVo;
import jnpf.model.cultivate.vo.teaching.*;
import org.apache.ibatis.annotations.Param;

import java.util.LinkedList;
import java.util.List;

public interface TeachingRecordMapper extends BaseMapper<TeachingRecord> {

    /**
     * 上级带教-查看数据(技能点分组统计)
     *
     * @return
     */
    List<SkillCountVo> skillCount(@Param("recordIds") List<String> recordIds);

    /**
     * 带教汇总查询
     */
    List<TeachingDataListVo> teachingSummaryQuery(@Param("queryTeachingRecordDto") QueryTeachingRecordDto queryTeachingRecordDto);

    /**
     * 查询技能点
     * @param queryTeachingRecordDto
     * @return List<TeachingDataListVo>
     */
    List<SkillKeyVo> queryCountSkillList(@Param("queryTeachingRecordDto") QueryTeachingRecordDto queryTeachingRecordDto);
    /**
     * 汇总-分页列表
     *
     * @param page 分页参数
     * @param pageDto 查询参数
     * @return 汇总数据集合
     */
    @DataScope(tableAlias = "fctr", type = FilterWhereTypeEnum.STORE_FILTER, tableFieldOrg = "F_StoreId")
    List<SummaryPageListVo> summaryPageList(@Param("page") Page<SummaryPageListVo> page, @Param("pageDto") TeachingBaseFilter pageDto);

    /**
     * 汇总-技能点集合
     *
     * @param pageDto 查询参数
     * @return 汇总数据集合
     */
    LinkedList<SkillCountVo> summarySkillList(@Param("pageDto") TeachingBaseFilter pageDto);

    /**
     * 记录-分页列表
     *
     * @param page 分页参数
     * @param pageDto 查询参数
     * @param skillIds 技能点ids过滤
     * @return 练习集合
     */
    @DataScope(tableAlias = "fctr", type = FilterWhereTypeEnum.USER_AND_STORE_FILTER, tableFieldOrg = "F_StoreId")
    List<RecordPageListVo> recordPageList(@Param("page") Page<RecordPageListVo> page, @Param("pageDto") TeachingBaseFilter pageDto, @Param("skillIds") List<String> skillIds);

    /**
     * App我的练习-分页列表
     *
     * @param page 分页参数
     * @param pageDto 查询参数
     * @return 练习集合
     */
    List<MyRecordPageListVo> myRecordPageList(@Param("page") Page<RecordPageListVo> page, @Param("pageDto") MyRecordPageListDto pageDto, @Param("userId") String userId);

    /**
     * 获取我的技能表
     *
     * @param viewDataDto 技能表查询参数，包含日期范围和分页信息
     * @return 技能表集合
     */
    List<RecordViewDataModel> getMySkillTable(@Param("pageDto") ViewDataDto viewDataDto, @Param("userId") String userId);

    /**
     * App员工练习-分页列表
     *
     * @param page 分页参数
     * @param pageDto 查询参数
     * @return 练习集合
     */
    @DataScope(tableAlias = "fctr", type = FilterWhereTypeEnum.USER_AND_STORE_FILTER, tableFieldOrg = "F_StoreId")
    List<EmployeePageListVo> employeePageList(@Param("page") Page<EmployeePageListVo> page, @Param("pageDto") EmployeePageListDto pageDto);

    /**
     * App员工练习-查看数据
     *
     * @param pageDto 查询参数
     * @return 练习集合
     */
    @DataScope(tableAlias = "fctr", type = FilterWhereTypeEnum.STORE_FILTER, tableFieldOrg = "F_StoreId")
    List<EmployeeViewDataVo> employeeViewData(@Param("pageDto") ViewDataDto pageDto);

    /**
     * App员工练习-技能点集合
     *
     * @param pageDto 查询参数
     * @return 汇总数据集合
     */
    @DataScope(tableAlias = "fctr", tableField = "F_UserId", type = FilterWhereTypeEnum.USER_FILTER)
    LinkedList<SkillCountVo> employeeSkillList(@Param("pageDto") ViewDataDto pageDto);

    /**
     * 上级带教-查看数据
     *
     * @param storeId 门店ID
     * @param loginUserId 登录用户ID
     * @return 带教数据
     */
    SuperiorTeachingSummaryVo getSuperiorTeachingSummary(@Param("storeId") String storeId, @Param("loginUserId") String loginUserId);

    /**
     * 根据storeIds查询每个门店下的带教数量
     * @param queryDto 查询条件
     * @param recordIds 满足学员名称条件的带教记录
     * @return java.util.List<jnpf.model.cultivate.v2.teaching.vo.StoreTeachingVo>
     */
    List<StoreTeachingVo> getStoreRecordCount(@Param("queryDto") RecordQueryDto queryDto, @Param("recordIds") List<String> recordIds);

    /**
     * 根据storeId查询门店下的带教记录
     * @param queryDto 查询条件
     * @param recordIds 满足学员名称条件的带教记录
     * @return java.util.List<jnpf.model.cultivate.v2.teaching.vo.V2TeachingRecordVo>
     */
    List<V2TeachingRecordVo> getStoreRecordList(@Param("queryDto") RecordQueryDto queryDto, @Param("recordIds") List<String> recordIds, @Param("userId") String userId);

    /**
     * 查询带教详情
     * @param bizId 带教/练习id
     * @return jnpf.model.cultivate.v2.teaching.vo.TeachingDetailVo
     */
    TeachingDetailVo getTeachingDetailById(String bizId);
}