package com.ssyf.third.trans.baidu;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Optional;

/**
 * 百度翻译API支持的语言代码枚举
 * 参考文档：https://api.fanyi.baidu.com/doc/21#languageList
 */
@Getter
@AllArgsConstructor
public enum LanguageCode {

    /** 自动检测 */
    AUTO("auto", "自动检测"),
    /** 中文 */
    CHINESE("zh", "中文"),
    /** 英语 */
    ENGLISH("en", "英语"),
    /** 日语 */
    JAPANESE("jp", "日语"),
    /** 韩语 */
    KOREAN("kor", "韩语"),
    /** 法语 */
    FRENCH("fra", "法语"),
    /** 西班牙语 */
    SPANISH("spa", "西班牙语"),
    /** 俄语 */
    RUSSIAN("ru", "俄语"),
    /** 德语 */
    GERMAN("de", "德语"),
    /** 阿拉伯语 */
    ARABIC("ara", "阿拉伯语"),
    /** 葡萄牙语 */
    PORTUGUESE("pt", "葡萄牙语"),
    /** 意大利语 */
    ITALIAN("it", "意大利语"),
    /** 荷兰语 */
    DUTCH("nl", "荷兰语"),
    /** 波兰语 */
    POLISH("pl", "波兰语"),
    /** 罗马尼亚语 */
    ROMANIAN("rom", "罗马尼亚语"),
    /** 瑞典语 */
    SWEDISH("swe", "瑞典语"),
    /** 捷克语 */
    CZECH("cs", "捷克语"),
    /** 希腊语 */
    GREEK("el", "希腊语"),
    /** 丹麦语 */
    DANISH("dan", "丹麦语"),
    /** 匈牙利语 */
    HUNGARIAN("hu", "匈牙利语"),
    /** 希伯来语 */
    HEBREW("heb", "希伯来语"),
    /** 挪威语 */
    NORWEGIAN("nor", "挪威语"),
    /** 越南语 */
    VIETNAMESE("vie", "越南语"),
    /** 泰语 */
    THAI("th", "泰语"),
    /** 土耳其语 */
    TURKISH("tr", "土耳其语"),
    /** 乌克兰语 */
    UKRAINIAN("uk", "乌克兰语"),
    /** 波斯语 */
    PERSIAN("per", "波斯语");

    /** 语言代码 */
    private final String code;
    /** 语言名称 */
    private final String name;

    /**
     * 根据语言代码获取枚举
     * @param code 语言代码
     * @return 对应的枚举实例
     */
    public static Optional<LanguageCode> getByCode(String code) {
        return Arrays.stream(values())
                .filter(languageCode -> languageCode.code.equals(code))
                .findFirst();
    }

    /**
     * 验证语言代码是否有效
     * @param code 语言代码
     * @return 验证结果
     */
    public static boolean isValidCode(String code) {
        return getByCode(code).isPresent();
    }
}