import os
import PyPDF2
from tkinter import *
from tkinter import filedialog

# Create a GUI window using tkinter
root = Tk()
root.configure(background='grey')
root.title('PDF Password Remover')
root.geometry('300x350')

# this is the method select_file which when invoked uses filedialog to open a file and store the path of the file in the variable file_path
def select_file():
    global file_path
    file_path = filedialog.askopenfilename()

    # Creating a label to show the file path
    Label(root, text=file_path, bg='grey', fg='white').pack(pady=10)

# this is the method decrypt which when invoked decrypts the file using the password provided by the user
def decrypt():
    passwd = password.get() # getting the password from the entry widget

    # Opening the PDF file with a password
    pdf_file = open(file_path, 'rb')
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    if pdf_reader.is_encrypted:
        pdf_reader.decrypt(passwd)

    # Create a new PDF file without password protection
    pdf_writer = PyPDF2.PdfWriter()
    length = len(pdf_reader.pages)
    for page_num in range(length):
        pdf_writer.add_page(pdf_reader.pages[length - page_num - 1])

    # Creating a new file with the name provided by the user
    new_file_name = new_file.get()+".pdf"
    new_pdf_file = open(new_file_name, 'wb')
    pdf_writer.write(new_pdf_file)

    # Closing the files
    pdf_file.close()
    new_pdf_file.close()

    # Showing the file in a tkinter window
    show_pdf()

# this is a method that has a canvas of 500x700 resizeable to show the pdf file
# def show_pdf():
#     pdf_file = open(new_file.get()+".pdf", 'rb')
#     pdf_reader = PyPDF2.PdfReader(pdf_file)
#     page = pdf_reader.pages[0] 
#     page_content = page.extract_text()
#     print(page_content)
#     pdf_file.close()

def show_pdf():
    pdf_file = new_file.get()+".pdf"
    os.system(f"evince {pdf_file}")


# Button to choose the file to be decrypted
Button(root, text='Select File', bg='white', font=('arial', 12, 'normal'), command=select_file).pack(pady=20)

# Label widget to show the password
Label(root, text='Password: ', bg='grey', fg = 'white', font=('arial', 12, 'normal')).pack()

# Entry widget to accept the password
password = Entry(root,text='Password', width=20, font=('arial', 12, 'normal'), show='*', border=2)
password.pack(pady=20)

# Label widget to show the name with which the new file would be stored
Label(root, text='New File Name:', bg='grey', fg = 'white', font=('arial', 12, 'normal')).pack()

# Entry widget to accept the name with which the new file would be stored
new_file = Entry(root,text='New File Name', width=20, font=('arial', 12, 'normal'), border=2)
new_file.pack(pady=20)

# Button to decrypt the file
Button(root, text='Decrypt', bg='white', font=('arial', 12, 'normal'), command=decrypt).pack(pady=20)

root.mainloop()