import tkinter as tk
from tkinter import ttk, scrolledtext, messagebox
import requests
import re

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

class TranslateApp:
    def __init__(self, root):
        self.root = root
        self.root.title("桌面翻译工具")
        self.root.geometry("640x450")
        self.root.resizable(False, False)

        # 语种配置
        self.lang_map = {
            "中文 → 英文": ("zh", "en"),
            "英文 → 中文": ("en", "zh"),
            "中文 → 日文": ("zh", "jp"),
            "日文 → 中文": ("jp", "zh"),
            "中文 → 韩文": ("zh", "kor"),
            "韩文 → 中文": ("kor", "zh")
        }

        # 顶部选择栏
        top_frame = ttk.Frame(root, padding=10)
        top_frame.pack(fill=tk.X)
        ttk.Label(top_frame, text="翻译语种：").pack(side=tk.LEFT)
        self.lang_var = tk.StringVar(value="中文 → 英文")
        lang_combo = ttk.Combobox(top_frame, textvariable=self.lang_var, values=list(self.lang_map.keys()), width=18, state="readonly")
        lang_combo.pack(side=tk.LEFT, padx=10)

        # 输入框
        input_group = ttk.LabelFrame(root, text="输入原文", padding=8)
        input_group.pack(fill=tk.BOTH, expand=True, padx=10, pady=4)
        self.input_box = scrolledtext.ScrolledText(input_group, height=8, wrap=tk.WORD)
        self.input_box.pack(fill=tk.BOTH, expand=True)

        # 按钮区
        btn_frame = ttk.Frame(root, padding=6)
        btn_frame.pack(fill=tk.X, padx=10)
        ttk.Button(btn_frame, text="开始翻译", command=self.translate).pack(side=tk.LEFT, padx=4)
        ttk.Button(btn_frame, text="清空全部", command=self.clear_all).pack(side=tk.LEFT, padx=4)
        ttk.Button(btn_frame, text="复制译文", command=self.copy_text).pack(side=tk.RIGHT, padx=4)

        # 结果框
        res_group = ttk.LabelFrame(root, text="翻译结果", padding=8)
        res_group.pack(fill=tk.BOTH, expand=True, padx=10, pady=4)
        self.result_box = scrolledtext.ScrolledText(res_group, height=8, wrap=tk.WORD, state=tk.DISABLED)
        self.result_box.pack(fill=tk.BOTH, expand=True)

    # 核心翻译函数
    def get_translate(self, text, from_lang, to_lang):
        if not text.strip():
            return "请输入翻译内容"
        try:
            url = "https://fanyi.baidu.com/sug"
            data = {
                "kw": text
            }
            resp = requests.post(url, data=data, headers=headers, timeout=10)
            json_data = resp.json()
            if "data" in json_data and len(json_data["data"]) > 0:
                return json_data["data"][0]["v"]
            else:
                # 简单释义接口失效时使用备用接口
                url2 = "https://fanyi.baidu.com/v2transapi"
                params = {
                    "from": from_lang,
                    "to": to_lang,
                    "query": text
                }
                res2 = requests.post(url2, data=params, headers=headers, timeout=10)
                json2 = res2.json()
                return json2["trans_result"]["data"][0]["dst"]
        except Exception as err:
            return f"翻译失败：网络异常或接口限制\n{str(err)}"

    def translate(self):
        raw_text = self.input_box.get("1.0", tk.END).strip()
        select_type = self.lang_var.get()
        f_lang, t_lang = self.lang_map[select_type]
        translate_result = self.get_translate(raw_text, f_lang, t_lang)

        self.result_box.config(state=tk.NORMAL)
        self.result_box.delete("1.0", tk.END)
        self.result_box.insert(tk.END, translate_result)
        self.result_box.config(state=tk.DISABLED)

    def clear_all(self):
        self.input_box.delete("1.0", tk.END)
        self.result_box.config(state=tk.NORMAL)
        self.result_box.delete("1.0", tk.END)
        self.result_box.config(state=tk.DISABLED)

    def copy_text(self):
        res = self.result_box.get("1.0", tk.END).strip()
        if res and "翻译失败" not in res:
            self.root.clipboard_clear()
            self.root.clipboard_append(res)
            messagebox.showinfo("提示", "译文复制成功！")
        else:
            messagebox.showwarning("提示", "没有可复制的翻译内容")

if __name__ == "__main__":
    root = tk.Tk()
    app = TranslateApp(root)
    root.mainloop()