package tech.easyflow.ai.chattime.availability;

import java.util.List;

/**
 * 聊天时工具可用性编排服务。
 */
public interface ChatTimeToolAvailabilityService {

    /**
     * 评估单个候选项的聊天时可用性。
     *
     * @param context 聊天时上下文
     * @param candidate 聊天工具候选项
     * @return 判定结果
     */
    ChatTimeToolAvailabilityDecision evaluate(ChatTimeToolAvailabilityContext context, Object candidate);

    /**
     * 过滤当前聊天上下文中可用的候选项。
     *
     * @param context 聊天时上下文
     * @param candidates 候选项列表
     * @param <T> 候选项类型
     * @return 过滤后的候选项
     */
    <T> List<T> filterAvailable(ChatTimeToolAvailabilityContext context, List<T> candidates);

    /**
     * 断言候选项在当前聊天上下文中可用。
     *
     * @param context 聊天时上下文
     * @param candidate 聊天工具候选项
     * @param fallbackMessage 默认兜底文案
     */
    void assertAvailable(ChatTimeToolAvailabilityContext context, Object candidate, String fallbackMessage);
}
