package com.gxwebsoft.common.core.utils;

import com.aliyun.alimt20181012.Client;
import com.aliyun.alimt20181012.models.TranslateGeneralRequest;
import com.aliyun.alimt20181012.models.TranslateGeneralResponse;
import com.aliyun.teaopenapi.models.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 阿里云机器翻译工具类
 */
@Component
public class AliyunTranslateUtil {

    @Value("${aliyun.translate.access-key-id:}")
    private String accessKeyId;

    @Value("${aliyun.translate.access-key-secret:}")
    private String accessKeySecret;

    @Value("${aliyun.translate.endpoint:mt.cn-hangzhou.aliyuncs.com}")
    private String endpoint;

    /**
     * 创建客户端
     */
    private Client createClient() throws Exception {
        Config config = new Config()
                .setAccessKeyId(accessKeyId)
                .setAccessKeySecret(accessKeySecret)
                .setEndpoint(endpoint);
        return new Client(config);
    }

    /**
     * 翻译文本
     *
     * @param text       待翻译文本
     * @param targetLang 目标语言（如：en, zh, ja, ko等）
     * @param sourceLang 源语言（如：zh, en, auto等，auto表示自动检测）
     * @return 翻译后的文本
     */
    public String translate(String text, String targetLang, String sourceLang) {
        try {
            Client client = createClient();
            TranslateGeneralRequest request = new TranslateGeneralRequest()
                    .setFormatType("text")
                    .setSourceLanguage(sourceLang)
                    .setTargetLanguage(targetLang)
                    .setSourceText(text)
                    .setScene("general");

            TranslateGeneralResponse response = client.translateGeneral(request);
            return response.getBody().getData().getTranslated();
        } catch (Exception e) {
            e.printStackTrace();
            return text;
        }
    }

    /**
     * 翻译文本（自动检测源语言）
     *
     * @param text       待翻译文本
     * @param targetLang 目标语言
     * @return 翻译后的文本
     */
    public String translate(String text, String targetLang) {
        return translate(text, targetLang, "auto");
    }
}
