package com.ym.mec.biz.service;

import com.ym.mec.biz.dal.dto.MusicGroupGoodsAndDiscountDto;
import com.ym.mec.biz.dal.dto.MusicGroupRegRespDto;
import com.ym.mec.biz.dal.dto.MusicGroupSubjectGoodsAndInfoDto;
import com.ym.mec.biz.dal.entity.*;
import com.ym.mec.common.service.BaseService;

import java.util.List;

public interface MusicGroupSubjectPlanService extends BaseService<Integer, MusicGroupSubjectPlan> {

    /**
     * 获取乐团声部招生计划
     *
     * @param musicGroupId
     * @return
     */
    List<MusicGroupSubjectPlan> getMusicSubjectClassPlan(String musicGroupId);


    /**
     * 获取单一乐团声部招生计划
     *
     * @param musicGroupId
     * @return
     */
    MusicGroupSubjectPlan getMusicOneSubjectClassPlan(String musicGroupId, int subjectId);

    /**
     * 获取乐团声部报名缴费商品信息
     *
     * @param musicGroupId
     * @param subjectId
     * @return
     */
    MusicGroupSubjectGoodsAndInfoDto getSubjectGoodsAndInfo(String musicGroupId, Integer subjectId);

    /**
     * 乐团报名基本信息
     * @param musicGroupId
     * @return
     */
    MusicGroupRegRespDto getMusicGroupRegInfo(String musicGroupId);

    /**
     * @param musicGroupId
     * @param subjectId
     */
    void addApplyStudentNum(String musicGroupId, Integer subjectId,int num);

    /**
     * 批量修改声部规划费用
     * @param musicGroupSubjectPlans
     * @return
     */
    int batchUpdateFee(List<MusicGroupSubjectPlan> musicGroupSubjectPlans);


    /**
     * 根据科目编号和乐团编号获取乐团规划
     * @param musicGroupId
     * @param subjectId
     * @return
     */
    MusicGroupSubjectPlan findSubjectPlan(String musicGroupId, Integer subjectId);

    /**
     * 中途添加的学生的缴费信息
     *
     * @param musicGroupId
     * @param subjectId
     * @return
     */
    MusicGroupSubjectGoodsAndInfoDto getStudentGoodsAndInfo(String musicGroupId, Integer subjectId, StudentRegistration studentRegistration);


    /**
     * 获取声部的乐器、辅件（包含折扣）
     * @param subjectId
     * @param type
     * @param chargeTypeId
     * @return
     */
    List<MusicGroupGoodsAndDiscountDto> getSubjectGoods(Integer subjectId, String type, Integer chargeTypeId);
}
