package com.ym.mec.biz.service;

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

import com.ym.mec.auth.api.entity.SysUser;
import com.ym.mec.biz.dal.dto.BasicUserDto;
import com.ym.mec.biz.dal.dto.MusicCardDto;
import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
import com.ym.mec.biz.dal.entity.ApprovalStatus;
import com.ym.mec.biz.dal.entity.MusicGroup;
import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
import com.ym.mec.common.page.PageInfo;
import com.ym.mec.common.service.BaseService;

public interface MusicGroupService extends BaseService<String, MusicGroup> {
	/**
	 * 建团申请数据提交
	 * @param subFeeSettingDto
	 * @Author superzou
	 */
	String createGroup(SubFeeSettingDto subFeeSettingDto, Integer userId);

	/**
	 * 获取学生所在乐团详情
	 * @return
	 */
	List<MusicCardDto> queryUserMusicGroups(Integer userId);

	/**
	 * 获取个人中心乐团数据
	 * @param id
	 * @return
	 */
	MusicCardDto queryPersonalMusicGroups(Integer id);

	/**
	 * 根据学员编号获取相关老师列表
	 * @param studentId
	 * @return
	 */
	List<BasicUserDto> findTeachersByStuId(Integer studentId);

	/**
	 * 取消乐团
	 * @param musicGroupId 乐团编号
	 */
	boolean cancelMusicGroup(String musicGroupId);

	/**
	 * 暂停乐团
	 * @param musicGroupId 乐团编号
	 */
	boolean pauseMusicGroup(String musicGroupId);

	/**
	 * 恢复乐团
	 * @param musicGroupId 乐团编号
	 */
	boolean resumeMusicGroup(String musicGroupId);

	/**
	 * 延长缴费
	 * @param musicGroupId 乐团编号
	 * @param expireDate 延长缴费的截止日期
	 * @return
	 */
	boolean extensionPayment(String musicGroupId, Date expireDate);

	/**
	 * 申请退团
	 * @param musicGroupId 乐团编号
	 * @param sysUser 用户
	 * @return
	 */
	boolean applyQuitMusicGroup(String musicGroupId, SysUser sysUser);

	/**
	 * 审批退团
	 * @param id
	 * @param status
	 * @param reason
	 * @return
	 */
	boolean approveQuitMusicGroup(Long id, ApprovalStatus status, String reason);

	/**
	 *  续费
	 * @param musicGroupId 乐团编号
	 * @param userId 用户编号
	 * @return
	 */
	Map renew(String musicGroupId, Integer userId);

	/**
	 * 获取乐团列表
	 * @param queryInfo
	 * @return
	 */
	PageInfo<MusicGroup> queryMusicGroupPage(MusicGroupQueryInfo queryInfo);
}