package com.agent.management.service;

import com.agent.management.model.entity.HermesErrorPattern;

import java.util.List;

/**
 * Hermes 错误嗅探模式服务。
 *
 * <p>提供 CRUD 管理、内置模式初始化，以及运行时错误响应检测能力。</p>
 */
public interface HermesErrorPatternService {

    /** 列出全部模式（按 createdAt 升序，内置在前） */
    List<HermesErrorPattern> list();

    /** 创建新模式 */
    HermesErrorPattern create(HermesErrorPattern req);

    /** 更新已有模式（内置模式允许编辑 pattern/enabled/description，但禁止改名） */
    HermesErrorPattern update(Long id, HermesErrorPattern req);

    /** 删除模式（内置模式禁止删除，抛 BusinessException） */
    void delete(Long id);

    /** 启用/禁用切换 */
    HermesErrorPattern toggle(Long id);

    /** 重置为默认：清空自定义，恢复内置 */
    void resetToDefaults();

    /**
     * 错误响应检测：扫描 finalText 是否命中任一启用的模式。
     *
     * <p>命中返回 {@code matchedPatternName}；不命中返回 {@code matchedPatternName=null}。
     * finalText 为 null/blank 时直接返回不命中。</p>
     */
    ErrorDetectionResult isErrorResponse(String finalText);

    /** 检测结果 */
    final class ErrorDetectionResult {
        private final boolean error;
        private final String matchedPatternName;

        public ErrorDetectionResult(boolean error, String matchedPatternName) {
            this.error = error;
            this.matchedPatternName = matchedPatternName;
        }

        public boolean isError() { return error; }
        public String getMatchedPatternName() { return matchedPatternName; }

        public static ErrorDetectionResult notError() {
            return new ErrorDetectionResult(false, null);
        }

        public static ErrorDetectionResult of(String matchedPatternName) {
            return new ErrorDetectionResult(true, matchedPatternName);
        }
    }
}
