package tech.easyflow.ai.node.filegeneration;

import tech.easyflow.common.web.exceptions.BusinessException;

/**
 * 文件导出节点的固定规则集合。
 *
 * @author Codex
 * @since 2026-04-18
 */
public final class FileGenerationRules {
    public static final String DEFAULT_TEMPLATE_STYLE = "default";

    private FileGenerationRules() {
    }

    /**
     * 归一模板样式。
     *
     * @param templateStyle 原始样式值
     * @return 可用的模板样式
     */
    public static String normalizeTemplateStyle(String templateStyle) {
        if (templateStyle == null || templateStyle.isBlank()) {
            return DEFAULT_TEMPLATE_STYLE;
        }
        return DEFAULT_TEMPLATE_STYLE.equalsIgnoreCase(templateStyle.trim())
                ? DEFAULT_TEMPLATE_STYLE
                : DEFAULT_TEMPLATE_STYLE;
    }

    /**
     * 校验输入/输出格式组合是否合法。
     *
     * @param sourceFormat 输入格式
     * @param targetFormat 输出格式
     */
    public static void requireSupportedCombination(SourceFormat sourceFormat, TargetFormat targetFormat) {
        if (!isSupportedCombination(sourceFormat, targetFormat)) {
            throw new BusinessException("文件生成节点暂不支持 " + sourceFormat.getValue() + " -> " + targetFormat.getValue() + " 组合");
        }
    }

    /**
     * 判断输入/输出格式组合是否受支持。
     *
     * @param sourceFormat 输入格式
     * @param targetFormat 输出格式
     * @return 是否受支持
     */
    public static boolean isSupportedCombination(SourceFormat sourceFormat, TargetFormat targetFormat) {
        if (sourceFormat == null || targetFormat == null) {
            return false;
        }
        if (sourceFormat == SourceFormat.HTML) {
            return targetFormat == TargetFormat.HTML || targetFormat == TargetFormat.PDF;
        }
        return true;
    }
}
