package com.zhentao.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhentao.dto.MatchmakerQueryDTO;
import com.zhentao.entity.Matchmaker;
import com.zhentao.vo.MatchmakerVO;

/**
 * 红娘服务接口
 */
public interface MatchmakerService extends IService<Matchmaker> {
    
    /**
     * 分页查询红娘列表
     * 
     * @param queryDTO 查询条件
     * @return 红娘VO分页数据
     */
    Page<MatchmakerVO> getMatchmakerPage(MatchmakerQueryDTO queryDTO);
    
    /**
     * 根据ID查询红娘详情
     * 
     * @param matchmakerId 红娘ID
     * @return 红娘VO
     */
    MatchmakerVO getMatchmakerDetail(Integer matchmakerId);
    
    /**
     * 获取全职红娘列表（用于首页展示）
     * 
     * @return 红娘VO分页数据
     */
    Page<MatchmakerVO> getFormalMatchmakers(Integer pageNum, Integer pageSize);
    
    /**
     * 清除红娘相关缓存（用于数据更新时）
     * 
     * @param matchmakerId 红娘ID，如果为null则只清除列表缓存
     */
    void clearMatchmakerCache(Integer matchmakerId);
    
    /**
     * 根据userId查询红娘详情
     * 
     * @param userId 用户ID
     * @return 红娘VO
     */
    MatchmakerVO getMatchmakerByUserId(Long userId);
    
    /**
     * 获取红娘排行榜（按成功撮合数排序）
     * 
     * @param limit 返回数量限制，默认20
     * @return 红娘排行榜列表
     */
    java.util.List<MatchmakerVO> getRankingList(Integer limit);
    
    /**
     * 根据用户ID查询红娘信息
     * 
     * @param userId 用户ID
     * @return 红娘实体
     */
    Matchmaker getMatchmakerByUserId(Integer userId);
    
    /**
     * 批量查询红娘信息
     * 
     * @param matchmakerIds 红娘ID列表
     * @return 红娘VO列表
     */
    java.util.List<MatchmakerVO> batchGetMatchmakers(java.util.List<Integer> matchmakerIds);
    
    /**
     * 用户给红娘点赞（一周只能给同一红娘点赞一次）
     * 
     * @param userId 用户ID
     * @param matchmakerId 红娘ID
     * @return 点赞结果
     */
    boolean likeMatchmaker(Long userId, Long matchmakerId);
    
    /**
     * 检查用户本周是否已给某红娘点赞
     * 
     * @param userId 用户ID
     * @param matchmakerId 红娘ID
     * @return 是否已点赞
     */
    boolean hasLikedThisWeek(Long userId, Long matchmakerId);
    
    /**
     * 获取本周红娘排行榜（按点赞数和成功人数的平均数排名）
     * 
     * @param limit 返回数量限制
     * @return 红娘排行榜列表
     */
    java.util.List<MatchmakerVO> getWeeklyRankingList(Integer limit);
}

