package com.ym.mec.biz.service;

import com.ym.mec.biz.dal.dto.PracticeGroupBuyDto;
import com.ym.mec.biz.dal.dto.SimpleUserDto;
import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
import com.ym.mec.common.entity.HttpResponseResult;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Author Joburgess
 * @Date 2020/3/6
 */
public interface EduPracticeGroupService {

    /**
     * @describe 陪练课购买
     * @author Joburgess
     * @date 2020/2/17
     * @param practiceGroupBuyParams: 购买参数
     * @param operatorInfo: 操作者信息
     * @return void
     */
    HttpResponseResult buyPracticeGroup(PracticeGroupBuyDto practiceGroupBuyParams, String operatorInfo);

    /**
     * @describe 支付订单回调
     * @author Joburgess
     * @date 2020/2/17
     * @param order: 支付订单
     * @return void
     */
    void orderCallback(StudentPaymentOrder order);

    /**
     * @describe 获取陪练课预约参数——试听
     * @author Joburgess
     * @date 2020/1/31
     * @param userId: 用户编号
     * @return java.util.Map
     */
    Map getTrialPracticeApplyParams(Integer userId);

    /**
     * @describe 获取可以指派试听课的老师列表
     * @author Joburgess
     * @date 2020/4/23
     * @param subjectId: 声部编号
     * @param studentId: 学生编号
     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
     */
    List<SimpleUserDto> findEnableAssignTeachers(@Param("subjectId") Integer subjectId,
                                                 @Param("studentId") Integer studentId);

    /**
     * @describe 获取一周内可以预约课程的时间——试听
     * @author Joburgess
     * @date 2020/2/2
     * @return java.util.Map
     */
    Map<Integer, List<String>> getEnableApplyDatesWithWeek(int startWeekDay);

    /**
     * @describe 获取指定教师的空闲时间——试听
     * @author Joburgess
     * @date 2020/2/10
     * @param userId: 用户编号
     * @param teacherId: 教师编号
     * @param monday: 周一日期
     * @return java.util.Map
     */
    Map getTrialPracticeTeacherFreeTimes(Integer userId, Integer teacherId, String monday);

    /**
     * @describe 网管试听课创建
     * @author Joburgess
     * @date 2020/2/17
     * @param practiceGroupBuyParams: 购买参数
     * @param operatorInfo: 操作者信息
     * @return void
     */
    HttpResponseResult createTrialPracticeGroup(PracticeGroupBuyDto practiceGroupBuyParams, String operatorInfo);

    /**
     * @describe 获取学生的试听课
     * @author Joburgess
     * @date 2020/4/24
     * @param studentId:
     * @return java.util.List<com.ym.mec.biz.dal.entity.PracticeGroup>
     */
    Map<String, Object> getStudentTrialPractices(Integer studentId);

}
