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="처리할 폴더를 선택하세요")

    if not folder_path:
        log_message("폴더가 선택되지 않았습니다. 작업을 종료합니다.")
        return

    log_message(f"선택된 폴더: {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"\n파일 처리 중: {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_path}")

                        with open(file_path, 'w', encoding='utf-8') as f:
                            f.write(modified_content)
                        log_message(f"  수정 완료: \"range\": 90 -> \"range\": 100 ({num_replacements}회)")
                        modified_files_count +=1

                except Exception as e:
                    log_message(f"  오류 발생: {e}")

    log_message(f"\n--- 작업 완료 ---")
    log_message(f"총 처리된 .funscript 파일 수: {processed_files_count}")
    log_message(f"내용이 수정된 파일 수: {modified_files_count}")
    if processed_files_count == 0:
        log_message("처리할 .funscript 파일을 찾지 못했습니다.")


def create_log_window():
    log_window = tk.Tk()
    log_window.title("처리 로그")
    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("스크립트를 시작합니다. 폴더 선택 대화상자를 엽니다...")
    select_folder_and_process()
    log_message("\n모든 작업이 완료되었습니다. 로그 창을 닫아주세요.")
    main_window.mainloop()