package tech.easyflow.chatlog.service;

import tech.easyflow.chatlog.domain.dto.ChatMessageRecord;
import tech.easyflow.chatlog.domain.dto.ChatSessionSummary;

import java.math.BigInteger;
import java.util.List;

/**
 * 聊天会话删除与历史返回的业务扩展点。
 */
public interface ChatSessionExtension {

    /**
     * 判断扩展是否处理指定会话类型。
     *
     * @param summary 会话摘要
     * @return 需要处理时为 true
     */
    boolean supports(ChatSessionSummary summary);

    /**
     * 在会话删除落库前同步处理关联资源。
     *
     * @param summary 会话摘要
     * @param userId 会话用户 ID
     * @param operatorId 操作人 ID
     */
    default void beforeDelete(ChatSessionSummary summary, BigInteger userId, BigInteger operatorId) {
    }

    /**
     * 在会话删除分发成功后同步处理关联资源。
     *
     * @param summary 会话摘要
     * @param userId 会话用户 ID
     * @param operatorId 操作人 ID
     */
    default void afterDelete(ChatSessionSummary summary, BigInteger userId, BigInteger operatorId) {
    }

    /**
     * 在历史消息返回前覆盖业务安全投影。
     *
     * @param summary 会话摘要
     * @param records 本次返回的消息集合
     */
    default void projectMessages(ChatSessionSummary summary, List<ChatMessageRecord> records) {
    }
}
