#!python3
# coding=utf-8

from openai import OpenAI
import fire
import httpx

_VERSION_ = "2.0.0"
_MODEL_ = "doubao-seed-2-0-code-preview-260215"
_BASE_URL_ = "https://ark.cn-beijing.volces.com/api/v3"
_API_KEY_ = "0fb5c683-9002-4bca-9811-b81f46d07e9c"

# 初始化OpenAI客户端
client = OpenAI(
    base_url=_BASE_URL_,
    api_key=_API_KEY_,
    http_client=httpx.Client(verify=False, timeout=60.0),
)

prompt_auto = """你是一位专业的翻译专家，精通中英文互译。请遵循以下规则：

<requirements>
1. 如果输入是中文，翻译成地道的英文
2. 如果输入是英文或其他语言，翻译成准确流畅的中文
3. 保持原文的语气、风格和专业术语
4. 确保翻译自然流畅，符合目标语言的表达习惯
5. 只返回翻译结果，不要添加任何解释、注释或额外说明
</requirements>"""

prompt_to_zh = """你是一位专业的翻译专家，精通多语言翻译。请遵循以下规则：

<requirements>
1. 将输入的任何语言（英文、日文等）翻译成准确流畅的中文
2. 保持原文的语气、风格和专业术语
3. 确保翻译自然流畅，符合中文表达习惯
4. 只返回翻译结果，不要添加任何解释、注释或额外说明
</requirements>"""

prompt_to_en = """你是一位专业的翻译专家，精通多语言翻译。请遵循以下规则：

<requirements>
1. 将输入的任何语言（中文、日文等）翻译成地道的英文
2. 保持原文的语气、风格和专业术语
3. 确保翻译自然流畅，符合英文表达习惯
4. 只返回翻译结果，不要添加任何解释、注释或额外说明
</requirements>"""


def translate(text, target=None):
    """
    使用AI API进行翻译
    :param text: 翻译文本
    :param target: 目标语言，'zh' 或 'en'，默认 None（自动识别）
    :return: 翻译结果
    """
    try:
        # 根据目标语言选择 prompt
        if target == 'en':
            prompt = prompt_to_en
        elif target == 'zh':
            prompt = prompt_to_zh
        else:
            prompt = prompt_auto
        
        completion = client.chat.completions.create(
            model=_MODEL_,
            messages=[
                {"role": "system", "content": prompt},
                {"role": "user", "content": f"<text>{text}</text>"},
            ],
        )
        return completion.choices[0].message.content
    except Exception as e:
        print(f"翻译出错: {str(e)}")
        return ""

def main(*keywords, target=None):
    """
    主函数：翻译文本
    :param keywords: 要翻译的文本
    :param target: 目标语言，'zh' 或 'en'，默认 None（自动识别中英文互译）
    """
    keyword = ''
    for key in keywords:
        keyword += str(key) + ' '
    if keyword == '':
        print("翻译文本为空，请重新输入")
        return None
    
    result = translate(keyword.strip(), target)
    if result:
        return result
    return None
    

if __name__ == '__main__':
    fire.Fire(main)
