package cn.nianxx.thhotel.platform.message.service;

import cn.nianxx.thhotel.platform.message.common.dto.SourceMessageSummaryResponse;
import cn.nianxx.thhotel.platform.message.common.request.SourceMessageQueryRequest;
import cn.nianxx.thhotel.platform.message.common.result.SourceMessagePageResult;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * 来源消息安全查询服务。列表和普通详情只能返回安全摘要，不返回正文、HTML、附件 URL 或 payload。
 */
public interface SourceMessageQueryService {

    /**
     * 按安全查询条件分页读取 SourceMessage Inbox 摘要。
     *
     * @param request 查询条件和分页参数
     * @return 分页后的安全摘要结果
     */
    SourceMessagePageResult<SourceMessageSummaryResponse> query(SourceMessageQueryRequest request);

    /**
     * 按来源消息安全摘要关键词查询内部 SourceMessage ID，供业务列表做安全关联过滤。
     *
     * @param hotelId 酒店上下文 ID
     * @param keyword 来源消息安全摘要关键词
     * @return 匹配的内部 SourceMessage ID 列表
     */
    List<Long> findIdsBySafeKeyword(String hotelId, String keyword);

    /**
     * 按内部 SourceMessage ID 读取单条安全摘要。
     *
     * @param inboxId 内部 SourceMessage Inbox ID
     * @return 存在时返回安全摘要，不存在时为空
     */
    Optional<SourceMessageSummaryResponse> getSummary(Long inboxId);

    /**
     * 按内部 SourceMessage ID 批量读取安全摘要，供业务列表避免逐条查询。
     *
     * @param inboxIds 内部 SourceMessage Inbox ID 列表
     * @return 匹配到的安全摘要列表，不返回正文、HTML、附件 URL 或 payload
     */
    List<SourceMessageSummaryResponse> getSummariesByIds(List<Long> inboxIds);

    /**
     * 批量统计外部邮件会话下的 SourceMessage 数量，供业务摘要字段展示。
     *
     * @param hotelId 酒店上下文 ID
     * @param externalConversationIds 外部邮件会话 ID 列表
     * @return 会话 ID 到消息数量的映射
     */
    Map<String, Long> countByExternalConversationIds(String hotelId, List<String> externalConversationIds);
}
