package com.zhentao.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhentao.entity.ActivityRegistration;
import com.baomidou.mybatisplus.extension.service.IService;

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

/**
* @author 联想
* @description 针对表【activity_registration(活动报名记录表)】的数据库操作Service
* @createDate 2025-12-17 09:04:20
*/
public interface ActivityRegistrationService extends IService<ActivityRegistration> {

    /**
     * 分页查询报名列表（关联查询活动和用户信息）
     * @param page 页码
     * @param pageSize 每页大小
     * @param activityId 活动ID（可选）
     * @param checkInStatus 签到状态（可选，1：已报名，2：已取消，3：已签到）
     * @param paymentStatus 支付状态（可选，0：未支付，1：已支付）
     * @param keyword 搜索关键词（可选，用户名或手机号）
     * @return 分页结果
     */
    Map<String, Object> getRegistrationList(Integer page, Integer pageSize, 
                                             Integer activityId, 
                                             Integer checkInStatus, 
                                             Integer paymentStatus, 
                                             String keyword);

    /**
     * 查询所有符合条件的报名记录（用于导出）
     * @param activityId 活动ID（可选）
     * @param checkInStatus 签到状态（可选）
     * @param paymentStatus 支付状态（可选）
     * @param keyword 搜索关键词（可选）
     * @return 报名列表
     */
    List<ActivityRegistration> getAllRegistrations(Integer activityId, 
                                                    Integer checkInStatus, 
                                                    Integer paymentStatus, 
                                                    String keyword);

    /**
     * 获取报名统计数据
     * 报名总数：签到状态为已报名(status=1)的记录数
     * 已签到：签到状态为已签到(status=3)的记录数
     * 未签到：签到状态为已报名(status=1)但未签到(status≠3)的记录数
     * @param activityId 活动ID（必填）
     * @return 统计数据
     */
    Map<String, Object> getRegistrationStats(Integer activityId);
}
