import os
import subprocess
import threading
import tkinter as tk
from tkinter import filedialog, messagebox, ttk

# Nome do arquivo wget.exe (assumindo que ele está no mesmo diretório do script)
WGET_EXECUTAVEL = os.path.join(os.getcwd(), "wget.exe")

# Criar a janela principal
root = tk.Tk()
root.title("Downloader com wget.exe")
root.geometry("600x230")  # Define o tamanho da janela

# Variáveis da interface
url_var = tk.StringVar()
pasta_var = tk.StringVar()
progresso_percentual = tk.IntVar()  # Para a barra de progresso
status_var = tk.StringVar(value="Aguardando...")  # Texto de status

# Função para escolher diretório
def escolher_diretorio():
    pasta = filedialog.askdirectory()
    if pasta:
        pasta_var.set(pasta)

# Função para atualizar a barra de progresso
def atualizar_progresso(porcentagem, mensagem="Baixando..."):
    progresso_percentual.set(porcentagem)
    status_var.set(mensagem)
    root.update_idletasks()

# Função para iniciar o download usando wget.exe
def iniciar_download():
    url = url_var.get()
    pasta = pasta_var.get()

    if not url or not pasta:
        messagebox.showerror("Erro", "Preencha todos os campos!")
        return

    def baixar():
        try:
            nome_arquivo = os.path.basename(url)  # Obtém o nome do arquivo da URL
            caminho_completo = os.path.join(pasta, nome_arquivo)

            atualizar_progresso(0, "Iniciando download...")

            # Comando para executar o wget.exe
            comando = f'"{WGET_EXECUTAVEL}" --progress=dot -O "{caminho_completo}" "{url}"'
            
            # Executa o wget e captura a saída
            processo = subprocess.Popen(comando, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)

            for linha in processo.stdout:
                if "%" in linha:  # Captura progresso do wget
                    try:
                        porcentagem = int(linha.split("%")[0].strip().split()[-1])
                        atualizar_progresso(porcentagem, f"Baixando... {porcentagem}%")
                    except ValueError:
                        pass  # Se não conseguir extrair a porcentagem, ignora

            processo.wait()  # Aguarda o processo terminar

            if processo.returncode == 0:
                atualizar_progresso(100, "Download concluído!")
                messagebox.showinfo("Sucesso", "Download concluído!")
            else:
                messagebox.showerror("Erro", f"O wget retornou um erro. Código: {processo.returncode}")

        except Exception as e:
            messagebox.showerror("Erro", f"Falha ao baixar: {e}")

    # Criar uma thread para rodar o download sem travar a interface
    thread = threading.Thread(target=baixar)
    thread.start()

# Layout Moderno
frame = ttk.Frame(root, padding=10)
frame.pack(expand=True, fill="both")

ttk.Label(frame, text="URL do Arquivo:", font=("Arial", 10)).grid(row=0, column=0, sticky="w", pady=2)
entry_url = ttk.Entry(frame, textvariable=url_var, width=50)
entry_url.grid(row=0, column=1, pady=2, padx=5)

ttk.Button(frame, text="Escolher Pasta", command=escolher_diretorio).grid(row=1, column=0, sticky="w", pady=2)
ttk.Label(frame, textvariable=pasta_var, relief="sunken", anchor="w", width=40).grid(row=1, column=1, pady=2, padx=5)

ttk.Button(frame, text="Baixar", command=iniciar_download).grid(row=2, column=1, pady=10)

# Barra de progresso
progress_bar = ttk.Progressbar(frame, length=400, mode="determinate", variable=progresso_percentual)
progress_bar.grid(row=3, column=1, pady=10)

# Status do download
ttk.Label(frame, textvariable=status_var, font=("Arial", 10)).grid(row=4, column=1, pady=5)

# Executar a interface
root.mainloop()
