#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: ZHANG XINZENG
# Created on 2020-01-09 20:31

import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext
import threading as td
from queue import Queue
from dataclasses import dataclass

from googletranslate.googletranslate import main as trans


@dataclass()
class Args:
    target: str = 'zh-CN'
    query: str = ''
    host: str = 'translate.google.com'
    proxy: str = ''
    alternative: str = 'en'
    type: str = 'plain'
    synonyms: bool = False
    definitions: bool = True
    examples: bool = False
    tkk: str = ''


class UITranslate:
    def __init__(self, window):
        self.window = window
        self.window.title('Google Translate')

        frm = tk.Frame(self.window)
        frm.pack(anchor=tk.NW, fill=tk.BOTH, expand=1)

        frm_input = tk.Frame(frm)
        frm_output = tk.Frame(frm)
        frm_input.pack(anchor=tk.NW, fill=tk.X)
        frm_output.pack(anchor=tk.NW, fill=tk.BOTH, expand=1)

        self.input_text = tk.StringVar()
        self.input_entry = ttk.Entry(frm_input, textvariable=self.input_text)
        self.input_entry.pack(side=tk.LEFT, fill=tk.X, expand=1)

        self.run_queue = Queue()
        self.trans_button = ttk.Button(frm_input, text='trans', width=6, command=self.run)
        self.trans_button.pack(anchor=tk.NE, side=tk.LEFT)

        self.st = scrolledtext.ScrolledText(frm_output, state=tk.NORMAL)
        self.st.insert(tk.END, 'Google Translate\n')
        self.st.pack(anchor=tk.NW, fill=tk.BOTH, expand=1)

        self.input_entry.bind('<Return>', self.run)
        self.input_entry.bind('<Escape>', lambda event=None: self.input_text.set(''))

    def run(self, event=None):
        if self.run_queue.empty():
            td.Thread(target=self.trans).start()

    def trans(self):
        gui_style = ttk.Style()
        gui_style.configure('Ui.TButton', foreground='#FF0000')
        self.trans_button.config(style='Ui.TButton')
        self.run_queue.put(1)
        if self.input_text.get():
            query_string = self.input_text.get()
        else:
            try:
                query_string = self.window.clipboard_get()
                self.window.clipboard_clear()
            except Exception as e:
                query_string = str(e)
        Args.query = query_string
        trans_result = trans(Args)
        self.st.delete('1.0', tk.END)
        self.st.insert(tk.END, trans_result)
        self.run_queue.get()
        gui_style.configure('Ui.TButton', foreground='#000000')


if __name__ == '__main__':
    app = tk.Tk()
    UITranslate(app)
    app.mainloop()