import os
import tkinter as tk
from tkinter import filedialog, ttk
import argostranslate.package
import argostranslate.translate
from time import sleep

def setup_translation():
    """Configurează pachetul de traducere EN->RO"""
    from_code = "en"
    to_code = "ro"
    
    try:
        status_label.config(text="Actualizare index pachete...")
        root.update()
        argostranslate.package.update_package_index()
        available_packages = argostranslate.package.get_available_packages()
        package_to_install = next(
            filter(
                lambda x: x.from_code == from_code and x.to_code == to_code, 
                available_packages
            )
        )
        status_label.config(text="Descărcare pachet de traducere...")
        root.update()
        argostranslate.package.install_from_path(package_to_install.download())
        return True
    except Exception as e:
        status_label.config(text=f"Eroare la configurare: {str(e)}")
        return False

def translate_files():
    """Traduce fișierele selectate cu feedback în timp real"""
    # Verifică și configurează traducerea
    if not setup_translation():
        return
    
    # Selectare cale
    path = filedialog.askdirectory() if folder_var.get() else filedialog.askopenfilenames(
        filetypes=[("Text files", "*.txt")]
    )
    if not path:
        return
    
    # Creare folder output în directorul scriptului
    script_dir = os.path.dirname(os.path.abspath(__file__))
    output_dir = os.path.join(script_dir, 'ro')
    os.makedirs(output_dir, exist_ok=True)
    
    # Determinarea fișierelor
    files = [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.txt')] if isinstance(path, str) else path
    
    if not files:
        status_label.config(text="Niciun fișier .txt găsit!")
        return
    
    # Configurare bară de progres
    progress_bar["maximum"] = len(files)
    progress_bar["value"] = 0
    
    # Procesare fișiere
    for i, file_path in enumerate(files, 1):
        if file_path.endswith('.txt'):
            try:
                # Citire fișier
                current_file.config(text=f"Procesare: {os.path.basename(file_path)}")
                status_label.config(text=f"Fișier {i}/{len(files)}")
                root.update()
                
                with open(file_path, 'r', encoding='utf-8') as f:
                    text = f.read()
                
                # Traducere
                translated_text = argostranslate.translate.translate(text, "en", "ro")
                
                # Salvare în folderul 'ro' din directorul scriptului
                output_path = os.path.join(output_dir, os.path.basename(file_path))
                with open(output_path, 'w', encoding='utf-8') as f:
                    f.write(translated_text)
                
                progress_bar["value"] = i
                root.update()
                sleep(0.1)  # Mică pauză pentru a face progresul vizibil
                
            except Exception as e:
                status_label.config(text=f"Eroare la {os.path.basename(file_path)}: {str(e)}")
                root.update()
                sleep(1)
                continue
    
    status_label.config(text="Traducere completă!")
    current_file.config(text="Gata!")

# Configurare GUI
root = tk.Tk()
root.title("Bulk Translator EN to RO")
root.geometry("400x250")
root.resizable(False, False)

# Checkbox pentru selecție folder/fișiere
folder_var = tk.BooleanVar()
tk.Checkbutton(root, text="Bifează pentru folder (debifat = fișiere individuale)", 
              variable=folder_var).pack(pady=5)

# Buton start
tk.Button(root, text="Alege și Tradu", command=translate_files, 
         bg="#4CAF50", fg="white").pack(pady=10)

# Etichetă fișier curent
current_file = tk.Label(root, text="", wraplength=380)
current_file.pack(pady=5)

# Bară de progres
progress_bar = ttk.Progressbar(root, length=300, mode="determinate")
progress_bar.pack(pady=10)

# Etichetă status
status_label = tk.Label(root, text="Aștept selecție...", wraplength=380)
status_label.pack(pady=10)

root.mainloop()
