import tkinter as tk
from tkinter import filedialog, ttk, messagebox
import PyPDF2
import re
from datetime import datetime
import os

class EmailFinderApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Căutare Email-uri în PDF-uri")
        self.root.geometry("800x600")
        
        # Variabile pentru stocarea căilor către fișiere
        self.pdf_files = []
        self.email_file = ""
        self.emails = []
        
        self.create_widgets()
    
    def create_widgets(self):
        # Frame principal
        main_frame = ttk.Frame(self.root, padding="10")
        main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
        
        # Butoane pentru încărcarea fișierelor
        ttk.Button(main_frame, text="Încarcă PDF-uri", command=self.load_pdfs).grid(row=0, column=0, pady=5)
        ttk.Button(main_frame, text="Încarcă fișier cu email-uri", command=self.load_email_file).grid(row=1, column=0, pady=5)
        
        # Lista pentru afișarea PDF-urilor încărcate
        self.pdf_listbox = tk.Listbox(main_frame, width=60, height=5)
        self.pdf_listbox.grid(row=0, column=1, rowspan=2, padx=10, pady=5)
        
        # Scrollbar pentru lista de PDF-uri
        pdf_scrollbar = ttk.Scrollbar(main_frame, orient="vertical", command=self.pdf_listbox.yview)
        pdf_scrollbar.grid(row=0, column=2, rowspan=2, sticky=(tk.N, tk.S))
        self.pdf_listbox.configure(yscrollcommand=pdf_scrollbar.set)
        
        # Buton pentru începerea căutării
        ttk.Button(main_frame, text="Caută Email-uri", command=self.search_emails).grid(row=2, column=0, columnspan=3, pady=20)
        
        # Text widget pentru rezultate
        self.result_text = tk.Text(main_frame, width=70, height=20)
        self.result_text.grid(row=3, column=0, columnspan=3, pady=10)
        
        # Scrollbar pentru rezultate
        result_scrollbar = ttk.Scrollbar(main_frame, orient="vertical", command=self.result_text.yview)
        result_scrollbar.grid(row=3, column=3, sticky=(tk.N, tk.S))
        self.result_text.configure(yscrollcommand=result_scrollbar.set)
    
    def load_pdfs(self):
        files = filedialog.askopenfilenames(
            title="Selectează PDF-uri",
            filetypes=[("PDF files", "*.pdf")]
        )
        self.pdf_files = files
        self.pdf_listbox.delete(0, tk.END)
        for file in files:
            self.pdf_listbox.insert(tk.END, os.path.basename(file))
    
    def load_email_file(self):
        self.email_file = filedialog.askopenfilename(
            title="Selectează fișierul cu email-uri",
            filetypes=[("Text files", "*.txt")]
        )
        if self.email_file:
            with open(self.email_file, 'r') as f:
                self.emails = [line.strip() for line in f if line.strip()]
    
    def search_emails(self):
        if not self.pdf_files or not self.email_file:
            messagebox.showerror("Eroare", "Te rog încarcă atât PDF-urile cât și fișierul cu email-uri!")
            return
        
        self.result_text.delete(1.0, tk.END)
        results = []
        
        for pdf_path in self.pdf_files:
            try:
                with open(pdf_path, 'rb') as file:
                    pdf_reader = PyPDF2.PdfReader(file)
                    for page_num in range(len(pdf_reader.pages)):
                        page = pdf_reader.pages[page_num]
                        text = page.extract_text()
                        
                        for email in self.emails:
                            if email.lower() in text.lower():
                                result = f"Email: {email}\nDocument: {os.path.basename(pdf_path)}\nPagina: {page_num + 1}\n\n"
                                results.append(result)
                                self.result_text.insert(tk.END, result)
            
            except Exception as e:
                messagebox.showerror("Eroare", f"Eroare la procesarea {os.path.basename(pdf_path)}: {str(e)}")
        
        # Salvează rezultatele într-un fișier text
        if results:
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            output_file = f"rezultate_cautare_{timestamp}.txt"
            with open(output_file, 'w') as f:
                f.writelines(results)
            
            messagebox.showinfo("Succes", f"Rezultatele au fost salvate în {output_file}")
        else:
            messagebox.showinfo("Informație", "Nu s-au găsit email-uri în documentele selectate.")

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