import tkinter as tk
from tkinter import filedialog, scrolledtext
import os
import re
import shutil

def select_folder_and_process():
    root = tk.Tk()
    root.withdraw()
    folder_path = filedialog.askdirectory(title="Select a folder to process")

    if not folder_path:
        log_message("No folder selected. Exiting.")
        return

    log_message(f"Selected folder: {folder_path}")
    process_files_in_folder(folder_path)

def process_files_in_folder(folder_path):
    processed_files_count = 0
    modified_files_count = 0

    for root_dir, _, files in os.walk(folder_path):
        for filename in files:
            if filename.endswith(".funscript") and not filename.endswith(".funscript.bak"):
                file_path = os.path.join(root_dir, filename)
                processed_files_count += 1
                log_message(f"\nProcessing file: {file_path}")

                try:
                    with open(file_path, 'r', encoding='utf-8') as f:
                        content = f.read()

                    pattern = re.compile(r'("range"\s*:\s*["\']?)90(["\']?)', re.IGNORECASE)
                    
                    modified_content, num_replacements = pattern.subn(r'\g<1>100\g<2>', content)

                    if num_replacements > 0:
                        backup_path = file_path + ".bak"
                        shutil.copy2(file_path, backup_path)
                        log_message(f"  Backup created: {backup_path}")

                        with open(file_path, 'w', encoding='utf-8') as f:
                            f.write(modified_content)
                        log_message(f"  Modification complete: \"range\": 90 -> \"range\": 100 ({num_replacements} times)")
                        modified_files_count +=1

                except Exception as e:
                    log_message(f"  Error occurred: {e}")

    log_message(f"\n--- Processing Complete ---")
    log_message(f"Total .funscript files processed: {processed_files_count}")
    log_message(f"Number of files modified: {modified_files_count}")
    if processed_files_count == 0:
        log_message("No .funscript files found to process.")


def create_log_window():
    log_window = tk.Tk()
    log_window.title("Processing Log")
    log_window.geometry("800x600")

    log_text_area = scrolledtext.ScrolledText(log_window, wrap=tk.WORD, state='disabled')
    log_text_area.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)

    return log_text_area, log_window

log_area, main_window = create_log_window()

def log_message(message):
    if log_area:
        log_area.config(state='normal')
        log_area.insert(tk.END, message + "\n")
        log_area.see(tk.END)
        log_area.config(state='disabled')
        main_window.update_idletasks()

if __name__ == "__main__":
    log_message("Starting script. Opening folder selection dialog...")
    select_folder_and_process()
    log_message("\nAll operations completed. Please close the log window.")
    main_window.mainloop()