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

class SimpleTranslationApp:
    def __init__(self, root):
        self.root = root
        self.root.title("简单翻译工具")
        self.root.geometry("600x500")
        
        self.create_widgets()
        
        self.languages = {
            '中文': 'zh-CN',
            '英语': 'en',
            '日语': 'ja',
            '韩语': 'ko',
            '法语': 'fr',
            '德语': 'de',
            '西班牙语': 'es',
            '俄语': 'ru'
        }
        
        self.source_lang_combo['values'] = list(self.languages.keys())
        self.target_lang_combo['values'] = list(self.languages.keys())
        self.source_lang_combo.set('中文')
        self.target_lang_combo.set('英语')
    
    def create_widgets(self):
        main_frame = tk.Frame(self.root, padx=20, pady=20)
        main_frame.pack(fill=tk.BOTH, expand=True)
        
        tk.Label(main_frame, text="🌐 翻译工具", 
                font=('微软雅黑', 18, 'bold')).pack(pady=(0, 15))
        
        lang_frame = tk.Frame(main_frame)
        lang_frame.pack(fill=tk.X, pady=(0, 10))
        
        tk.Label(lang_frame, text="从:", font=('微软雅黑', 10)).pack(side=tk.LEFT, padx=5)
        self.source_lang_combo = ttk.Combobox(lang_frame, width=12, state='readonly')
        self.source_lang_combo.pack(side=tk.LEFT, padx=5)
        
        tk.Label(lang_frame, text="到:", font=('微软雅黑', 10)).pack(side=tk.LEFT, padx=5)
        self.target_lang_combo = ttk.Combobox(lang_frame, width=12, state='readonly')
        self.target_lang_combo.pack(side=tk.LEFT, padx=5)
        
        # 输入
        tk.Label(main_frame, text="输入文本:", font=('微软雅黑', 10)).pack(anchor='w', pady=(10, 5))
        self.input_text = scrolledtext.ScrolledText(main_frame, height=6, font=('微软雅黑', 11))
        self.input_text.pack(fill=tk.BOTH, expand=True, pady=(0, 10))
        
        # 按钮
        btn_frame = tk.Frame(main_frame)
        btn_frame.pack(fill=tk.X, pady=5)
        
        self.translate_btn = tk.Button(btn_frame, text="翻译", 
                                      command=self.translate_text,
                                      bg='#4CAF50', fg='white',
                                      font=('微软雅黑', 11, 'bold'),
                                      width=12)
        self.translate_btn.pack(side=tk.LEFT, padx=5)
        
        tk.Button(btn_frame, text="清空", command=self.clear_all,
                 bg='#f44336', fg='white', font=('微软雅黑', 10), width=12).pack(side=tk.LEFT, padx=5)
        
        tk.Button(btn_frame, text="复制", command=self.copy_result,
                 bg='#2196F3', fg='white', font=('微软雅黑', 10), width=12).pack(side=tk.LEFT, padx=5)
        
        # 输出
        tk.Label(main_frame, text="翻译结果:", font=('微软雅黑', 10)).pack(anchor='w', pady=(10, 5))
        self.output_text = scrolledtext.ScrolledText(main_frame, height=6, font=('微软雅黑', 11))
        self.output_text.pack(fill=tk.BOTH, expand=True)
        
        self.status_label = tk.Label(main_frame, text="✅ 就绪", fg='gray', font=('微软雅黑', 9))
        self.status_label.pack(pady=(10, 0))
    
    def translate_text(self):
        text = self.input_text.get('1.0', tk.END).strip()
        if not text:
            messagebox.showwarning("警告", "请输入文本")
            return
        
        src = self.languages[self.source_lang_combo.get()]
        dest = self.languages[self.target_lang_combo.get()]
        
        self.translate_btn.config(state='disabled', text='翻译中...')
        self.status_label.config(text='⏳ 翻译中...')
        
        def translate_thread():
            try:
                url = "https://api.mymemory.translated.net/get"
                params = {
                    'q': text,
                    'langpair': f'{src}|{dest}',
                    'de': 'test@example.com'
                }
                
                response = requests.get(url, params=params, timeout=10)
                if response.status_code == 200:
                    data = response.json()
                    if data.get('responseStatus') == 200:
                        result = data.get('responseData', {}).get('translatedText', '')
                        self.root.after(0, self.update_result, result)
                    else:
                        self.root.after(0, self.show_error, "翻译失败")
                else:
                    self.root.after(0, self.show_error, "服务不可用")
            except Exception as e:
                self.root.after(0, self.show_error, f"错误: {str(e)[:50]}")
            finally:
                self.root.after(0, self.reset_buttons)
        
        threading.Thread(target=translate_thread, daemon=True).start()
    
    def update_result(self, text):
        self.output_text.delete('1.0', tk.END)
        self.output_text.insert('1.0', text)
        self.status_label.config(text='✅ 翻译完成')
    
    def show_error(self, msg):
        self.status_label.config(text=f'❌ {msg}')
        messagebox.showerror("错误", msg)
    
    def reset_buttons(self):
        self.translate_btn.config(state='normal', text='翻译')
    
    def clear_all(self):
        self.input_text.delete('1.0', tk.END)
        self.output_text.delete('1.0', tk.END)
        self.status_label.config(text='✅ 已清空')
    
    def copy_result(self):
        text = self.output_text.get('1.0', tk.END).strip()
        if text:
            self.root.clipboard_clear()
            self.root.clipboard_append(text)
            self.status_label.config(text='✅ 已复制')

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