import tkinter as tk
from tkinter import ttk, messagebox
from translate import Translator


class TranslateApp:
    def __init__(self, root):
        self.root = root
        self.root.title("多语言翻译软件")
        self.root.geometry("650x520")
        self.root.resizable(False, False)

        # 深色模式标记
        self.dark_mode = False

        # 语言映射
        self.lang_map = {
            "中文": "zh",
            "英语": "en",
            "日语": "ja",
            "韩语": "ko"
        }
        self.lang_list = list(self.lang_map.keys())

        # 顶部框架
        self.top_frame = tk.Frame(root)
        self.top_frame.pack(pady=10)

        # 源语言
        tk.Label(self.top_frame, text="源语言：", font=(
            "微软雅黑", 10)).grid(row=0, column=0, padx=5)
        self.from_lang = ttk.Combobox(
            self.top_frame, values=self.lang_list, width=8, state="readonly")
        self.from_lang.set("中文")
        self.from_lang.grid(row=0, column=1, padx=5)

        # 目标语言
        tk.Label(self.top_frame, text="→ 目标语言：", font=(
            "微软雅黑", 10)).grid(row=0, column=2, padx=5)
        self.to_lang = ttk.Combobox(
            self.top_frame, values=self.lang_list, width=8, state="readonly")
        self.to_lang.set("英语")
        self.to_lang.grid(row=0, column=3, padx=5)

        # 功能按钮行
        self.btn_frame = tk.Frame(root)
        self.btn_frame.pack(pady=5)

        ttk.Button(self.btn_frame, text="开始翻译", command=self.translate_text).grid(
            row=0, column=0, padx=6)
        ttk.Button(self.btn_frame, text="复制结果", command=self.copy_result).grid(
            row=0, column=1, padx=6)
        ttk.Button(self.btn_frame, text="清空全部", command=self.clear_all).grid(
            row=0, column=2, padx=6)
        ttk.Button(self.btn_frame, text="深色模式", command=self.switch_mode).grid(
            row=0, column=3, padx=6)

        # 输入区域
        tk.Label(root, text="输入文本：", font=(
            "微软雅黑", 11)).pack(anchor="w", padx=20)
        self.input_text = tk.Text(root, width=75, height=9, font=("微软雅黑", 10))
        self.input_text.pack(padx=20, pady=5)

        # 输出区域
        tk.Label(root, text="翻译结果：", font=(
            "微软雅黑", 11)).pack(anchor="w", padx=20)
        self.out_text = tk.Text(root, width=75, height=9, font=("微软雅黑", 10))
        self.out_text.pack(padx=20, pady=5)

        # 初始化浅色主题
        self.set_light_mode()

    def translate_text(self):
        """多语言翻译核心"""
        text = self.input_text.get("1.0", tk.END).strip()
        if not text:
            messagebox.showwarning("提示", "请输入要翻译的内容！")
            return

        f_lang = self.lang_map[self.from_lang.get()]
        t_lang = self.lang_map[self.to_lang.get()]

        try:
            trans = Translator(from_lang=f_lang, to_lang=t_lang)
            res = trans.translate(text)
            self.out_text.delete("1.0", tk.END)
            self.out_text.insert(tk.END, res)
        except Exception as e:
            messagebox.showerror("翻译失败", "网络异常或当前语种暂时无法翻译！")

    def copy_result(self):
        """复制翻译结果到剪贴板"""
        res = self.out_text.get("1.0", tk.END).strip()
        if not res:
            messagebox.showinfo("提示", "暂无翻译结果可复制！")
            return
        self.root.clipboard_clear()
        self.root.clipboard_append(res)
        messagebox.showinfo("成功", "结果已复制到剪贴板！")

    def clear_all(self):
        """清空输入输出"""
        self.input_text.delete("1.0", tk.END)
        self.out_text.delete("1.0", tk.END)

    def switch_mode(self):
        """切换深浅色模式"""
        if self.dark_mode:
            self.set_light_mode()
        else:
            self.set_dark_mode()

    def set_light_mode(self):
        self.dark_mode = False
        bg_color = "#ffffff"
        fg_color = "#000000"
        self.root.config(bg=bg_color)
        self.top_frame.config(bg=bg_color)
        self.btn_frame.config(bg=bg_color)
        self.input_text.config(bg="#f8f8f8", fg=fg_color)
        self.out_text.config(bg="#f8f8f8", fg=fg_color)

    def set_dark_mode(self):
        self.dark_mode = True
        bg_color = "#2b2b2b"
        fg_color = "#eeeeee"
        self.root.config(bg=bg_color)
        self.top_frame.config(bg=bg_color)
        self.btn_frame.config(bg=bg_color)
        self.input_text.config(bg="#3c3f41", fg=fg_color)
        self.out_text.config(bg="#3c3f41", fg=fg_color)


if __name__ == "__main__":
    win = tk.Tk()
    app = TranslateApp(win)
    win.mainloop()
