AiTasteLevel.java 3.1 KB
package com.aigeo.common.enums;

import lombok.Getter;

/**
 * AI写作风格等级枚举
 * 对应数据库字段:ai_article_generation_tasks.ai_taste_level
 * 
 * AI内容生成的语言复杂度和专业程度:
 * - COLLOQUIAL: 口语化,通俗易懂
 * - JUNIOR_HIGH: 初中生水平,简单直白
 * - SENIOR_HIGH: 高中生水平,逻辑清晰
 * - PROFESSIONAL: 专业级别,术语丰富
 *
 * @author AIGEO Team
 * @since 1.0.0
 */
@Getter
public enum AiTasteLevel {
    
    /**
     * 口语化风格 - 通俗易懂,日常对话风格
     */
    COLLOQUIAL("colloquial", "口语化", 1),
    
    /**
     * 初中水平 - 简单直白,易于理解
     */
    JUNIOR_HIGH("junior_high", "初中水平", 2),
    
    /**
     * 高中水平 - 逻辑清晰,表达准确
     */
    SENIOR_HIGH("senior_high", "高中水平", 3),
    
    /**
     * 专业水平 - 术语丰富,表达专业
     */
    PROFESSIONAL("professional", "专业水平", 4);

    /**
     * 数据库存储值
     */
    private final String code;
    
    /**
     * 显示名称
     */
    private final String displayName;
    
    /**
     * 复杂度等级(1-4,数字越大越复杂)
     */
    private final Integer complexityLevel;

    AiTasteLevel(String code, String displayName, Integer complexityLevel) {
        this.code = code;
        this.displayName = displayName;
        this.complexityLevel = complexityLevel;
    }
    
    /**
     * 根据代码获取枚举
     */
    public static AiTasteLevel fromCode(String code) {
        for (AiTasteLevel level : values()) {
            if (level.code.equals(code)) {
                return level;
            }
        }
        throw new IllegalArgumentException("未知的AI风格等级代码: " + code);
    }
    
    /**
     * 检查是否为基础水平
     */
    public boolean isBasicLevel() {
        return this == COLLOQUIAL || this == JUNIOR_HIGH;
    }
    
    /**
     * 检查是否为高级水平
     */
    public boolean isAdvancedLevel() {
        return this == SENIOR_HIGH || this == PROFESSIONAL;
    }
    
    /**
     * 获取推荐的文章长度范围(字数)
     */
    public int[] getRecommendedWordRange() {
        switch (this) {
            case COLLOQUIAL:
                return new int[]{300, 800};
            case JUNIOR_HIGH:
                return new int[]{500, 1200};
            case SENIOR_HIGH:
                return new int[]{800, 2000};
            case PROFESSIONAL:
                return new int[]{1000, 3000};
            default:
                return new int[]{500, 1200};
        }
    }
    
    /**
     * 获取适合的目标受众描述
     */
    public String getTargetAudience() {
        switch (this) {
            case COLLOQUIAL:
                return "大众读者,追求轻松阅读";
            case JUNIOR_HIGH:
                return "普通用户,需要简明扼要";
            case SENIOR_HIGH:
                return "有一定基础的读者";
            case PROFESSIONAL:
                return "专业人士和行业专家";
            default:
                return "普通读者";
        }
    }
}