import sys
import io
import aiohttp
import asyncio
import hashlib
import random
import urllib.parse

YOUDAO_URL = 'https://openapi.youdao.com/api'
APP_KEY = ''  # 填入你的有道翻译应用ID，进入这个网址注册 https://ai.youdao.com/
APP_SECRET = ''  # 填入你的有道翻译应用密钥 注册送10元，实名40，扫码填问卷50.小玩意还挺贵，测试了会儿花了4毛。

def encrypt(signStr):
    hash_algorithm = hashlib.md5()
    hash_algorithm.update(signStr.encode('utf-8'))
    return hash_algorithm.hexdigest()

async def translate(session, text, from_lang='auto', to_lang='zh-CHS'):
    salt = str(random.randint(1, 65536))
    sign = encrypt(APP_KEY + text + salt + APP_SECRET)
    payload = {
        'q': text,
        'from': from_lang,
        'to': to_lang,
        'appKey': APP_KEY,
        'salt': salt,
        'sign': sign
    }
    async with session.post(YOUDAO_URL, data=payload) as response:
        return await response.json()

async def main():
    if len(sys.argv) != 2:
        print("Usage: python youdao_translate.py <text>")
        sys.exit(1)

    # 设置标准输出的编码为UTF-8
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

    originalText = sys.argv[1]

    # 对输入文本进行URL解码
    decodedText = urllib.parse.unquote(originalText)

    # 检查输入文本的字符数是否超过7个字符
    if len(decodedText) > 10:
        async with aiohttp.ClientSession() as session:
            result = await translate(session, decodedText)
            translation = result.get('translation', [''])[0]

            # 构建输出字符串
            output = f"""
            <html>
            <head>
            <style type="text/css">
            button {{
                font-size: 11px;
                padding: 1px 3px;
                float: right;
                background-color: lightblue;
                border: none;
                border-radius: 3px;
                cursor: pointer;
            }}
            #copy-status-youdao {{
                font-size: 11px;
                margin-left: 10px;
                color: green;
            }}
            </style>
            </head>
            <body>
            {decodedText}<br>
            {'-' * 9}<br>
            {translation}<br>
            <button onclick="copyToClipboardYoudao('{translation}')">Copy Translation</button>
            <span id="copy-status-youdao"></span>
            <script type="text/javascript">
            function copyToClipboardYoudao(text) {{
                var dummy = document.createElement("textarea");
                document.body.appendChild(dummy);
                dummy.value = text;
                dummy.select();
                document.execCommand("copy");
                document.body.removeChild(dummy);
                document.getElementById("copy-status-youdao").innerText = "已复制";
                setTimeout(() => {{
                    document.getElementById("copy-status-youdao").innerText = "";
                }}, 2000);
            }}
            </script>
            </body>
            </html>
            """

            # 打印输出字符串
            print(output)
    else:
        # 如果字符数不超过7个字符，直接退出脚本，不进行任何操作
        sys.exit()

if __name__ == '__main__':
    asyncio.run(main())