package com.ym.mec.biz.dal.dao;

import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
import com.ym.mec.biz.dal.enums.GroupType;
import com.ym.mec.biz.dal.enums.IndexDataType;
import com.ym.mec.biz.dal.enums.JobNatureEnum;
import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
import com.ym.mec.common.dal.BaseDAO;
import org.apache.ibatis.annotations.Param;
import org.apache.poi.ss.formula.functions.Index;

import java.util.Collection;
import java.util.List;
import java.util.Set;

public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData> {

    int batchInsert(@Param("datas") List<IndexBaseMonthData> datas);

    int batchInsertWithDataType(@Param("datas") List<IndexBaseMonthData> datas,
                                @Param("dataType")IndexDataType dataType);

    int deleteWithMonthAndType(@Param("months") Collection months,
                               @Param("dataType")IndexDataType dataType);

    /**
     * @describe 获取首页统计数据
     * @author Joburgess
     * @date 2021/1/8 0008
     * @param organIds:
     * @param dataTypes:
     * @param startMonth:
     * @param endMonth:
     * @return java.util.List<com.ym.mec.biz.dal.entity.IndexBaseMonthData>
     */
	List<IndexBaseMonthData> getIndexBaseData(@Param("organIds") Set<Integer> organIds,
                                              @Param("dataTypes") Set<String> dataTypes,
                                              @Param("startMonth") String startMonth,
                                              @Param("endMonth") String endMonth);

    /**
     * @describe 统计系统中指定时间段的学员注册数据
     * @author Joburgess
     * @date 2021/1/7 0007
     * @return java.util.List<com.ym.mec.biz.dal.dto.IndexBaseMonthDto>
     */
    List<IndexBaseMonthData> getStudentSignUpData(@Param("month") String month);

    /**
     * @describe 统计作业布置数据
     * @author Joburgess
     * @date 2021/1/7 0007
     * @return java.util.List<com.ym.mec.biz.dal.dto.IndexBaseMonthDto>
     */
    List<IndexBaseMonthData> getHomeworkData(@Param("month") String month,
                                             @Param("type") String type);

    /**
     * @describe 统计合作单位数据
     * @author Joburgess
     * @date 2021/1/11 0011
     * @return java.util.List<com.ym.mec.biz.dal.entity.IndexBaseMonthData>
     */
    List<IndexBaseMonthData> getSchoolData(@Param("month") String month);

    /**
     * @describe 统计乐团数据
     * @author Joburgess
     * @date 2021/1/11 0011
     * @return java.util.List<com.ym.mec.biz.dal.entity.IndexBaseMonthData>
     */
    List<IndexBaseMonthData> getMusicData(@Param("month") String month);

    /**
     * @describe 统计乐团学员数据
     * @author Joburgess
     * @date 2021/1/11 0011
     * @return java.util.List<com.ym.mec.biz.dal.entity.IndexBaseMonthData>
     */
    List<IndexBaseMonthData> getMusicStudentData(@Param("month") String month,
                                                 @Param("type") String type);

    List<IndexBaseMonthData> getMusicGroupPreRegistrationStudentData(@Param("month") String month);

    List<IndexBaseMonthData> getMusicGroupStudentFromPreData(@Param("month") String month,
                                                             @Param("paymentStatus") PaymentStatusEnum paymentStatus);

    List<Integer> getMusicGroupStudentIdFromPre(@Param("month") String month,
                                                @Param("paymentStatus") PaymentStatusEnum paymentStatus);

    List<IndexBaseMonthData> getStudentConversionData(@Param("month") String month,
                                                      @Param("studentIds") List<Integer> studentIds);

    List<IndexBaseMonthData> getOtherStudentData(@Param("month") String month);

    List<IndexBaseMonthData> getTeacherData(@Param("month") String month,
                                            @Param("jobNature") JobNatureEnum jobNature,
                                            @Param("isDemission") Boolean isDemission);

    List<IndexBaseMonthData> getGroupCourseData(@Param("month") String month,
                                                @Param("groupType")GroupType groupType);
}
