package cn.iocoder.yudao.module.member.service.activityuser;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.activityuser.vo.ActivityUserCountVO;
import cn.iocoder.yudao.module.member.controller.admin.activityuser.vo.ActivityUserPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activityuser.vo.ActivityUserSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppActivityRespVO;
import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppActivityUserRespVO;
import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppUserApplyVO;
import cn.iocoder.yudao.module.member.dal.dataobject.activityuser.ActivityUserDO;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * 活动参加人员 Service 接口
 *
 * @author 我是秦俊旗
 */
public interface ActivityUserService {

    /**
     * 创建活动参加人员
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createActivityUser(@Valid ActivityUserSaveReqVO createReqVO);

    /**
     * 更新活动参加人员
     *
     * @param updateReqVO 更新信息
     */
    void updateActivityUser(@Valid ActivityUserSaveReqVO updateReqVO);

    /**
     * 删除活动参加人员
     *
     * @param id 编号
     */
    void deleteActivityUser(Long id);

    /**
     * 获得活动参加人员
     *
     * @param id 编号
     * @return 活动参加人员
     */
    ActivityUserDO getActivityUser(Long id);

    /**
     * 获得活动参加人员分页
     *
     * @param pageReqVO 分页查询
     * @return 活动参加人员分页
     */
    PageResult<ActivityUserDO> getActivityUserPage(ActivityUserPageReqVO pageReqVO);


    Map<Long, ActivityUserCountVO> countByActivityIds(List<Long> activityIds);


    List<ActivityUserDO> getUserListByActivityId(Long activityId);


    Boolean userApply(AppUserApplyVO appUserApplyVO);

    List<Long> isApplyByActivityIds(List<Long> activityIds,Long userId);

    PageResult<AppActivityRespVO> getUserRecordPage(ActivityUserPageReqVO pageReqVO);

    List<AppActivityUserRespVO> applyUserList(Long activityId);

    Boolean selectIsApply(Long activityId,Long userId);
}