package com.zhentao.repository;

import com.zhentao.entity.ChatMessageMongo;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;
import java.util.Optional;

/**
 * MongoDB聊天消息Repository
 * 提供NoSQL方式的消息存储和查询
 */
@Repository
public interface ChatMessageMongoRepository extends MongoRepository<ChatMessageMongo, String> {
    
    /**
     * 根据消息ID查询
     */
    Optional<ChatMessageMongo> findByMessageId(String messageId);
    
    /**
     * 根据会话ID查询消息列表
     */
    List<ChatMessageMongo> findByConversationIdOrderBySendTimeDesc(String conversationId);
    
    /**
     * 根据用户ID查询发送的消息
     */
    List<ChatMessageMongo> findByFromUserIdOrderBySendTimeDesc(Long fromUserId);
    
    /**
     * 根据用户ID查询接收的消息
     */
    List<ChatMessageMongo> findByToUserIdOrderBySendTimeDesc(Long toUserId);
    
    /**
     * 查询某个时间段的消息
     */
    @Query("{'sendTime': {$gte: ?0, $lte: ?1}}")
    List<ChatMessageMongo> findMessagesBetweenDates(Date startDate, Date endDate);
    
    /**
     * 统计某个会话的消息数量
     */
    long countByConversationId(String conversationId);
    
    /**
     * 统计某个用户发送的消息数量
     */
    long countByFromUserId(Long fromUserId);
    
    /**
     * 删除某个会话的所有消息
     */
    void deleteByConversationId(String conversationId);
    
    /**
     * 查询未读消息
     */
    @Query("{'toUserId': ?0, 'sendStatus': {$lt: 3}}")
    List<ChatMessageMongo> findUnreadMessages(Long userId);
}

