import os
import subprocess
from tkinter import filedialog, messagebox  # 💡 フォルダ選択画面用のライブラリ

def convert_folder_to_pdfa(target_folder, output_folder):
    # 出力先フォルダがない場合は自動作成
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
        print(f"作成された出力フォルダ: {output_folder}")

    gs_cmd = "gswin64c" if os.name == "nt" else "gs"

    for filename in os.listdir(target_folder):
        if filename.lower().endswith('.pdf'):
            input_path = os.path.join(target_folder, filename)
            output_path = os.path.join(output_folder, f"pdfa_{filename}")

            print(f"変換中: {filename} ...")

            # 💡 パスを直接指定する（rを忘れずに付け、お使いのバージョン（例: gs10.04.0 など）に合わせて書き換えてください）
            gs_direct_path = r"C:\Program Files\gs\gs10.07.1\bin\gswin64c.exe"

            # Ghostscriptを呼び出してPDF/Aに変換するコマンドの組み立て

            command = [
                gs_cmd,
                "-dPDFA=1",
                "-dBATCH",
                "-dNOPAUSE",
                "-sDEVICE=pdfwrite",
                "-sColorConversionStrategy=UseDeviceIndependentColor",
                f"-sOutputFile={output_path}",
                input_path
            ]

            try:
                result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
                if result.returncode == 0:
                    print(f"成功: {output_path}")
                else:
                    print(f"エラー発生 ({filename}): {result.stderr}")
            except FileNotFoundError:
                messagebox.showerror("エラー", "Ghostscriptが見つかりません。\n環境変数(Path)を確認してください。")
                return
            except Exception as e:
                print(f"予期せぬエラー ({filename}): {e}")

# --- メイン処理 ---
if __name__ == "__main__":
    print("--- フォルダ選択画面を開いています ---")

    # 1. 変換したいPDFが入っているフォルダを選択
    input_dir = filedialog.askdirectory(title="変換したいPDFが入っているフォルダを選択してください")

    # キャンセルされた場合は終了
    if not input_dir:
        print("処理がキャンセルされました。")
        exit()

    # 2. 変換後の保存先フォルダを選択
    output_dir = filedialog.askdirectory(title="変換後のPDF/Aファイルを保存するフォルダを選択してください")

    if not output_dir:
        print("処理がキャンセルされました。")
        exit()

    # 一括変換を実行
    convert_folder_to_pdfa(input_dir, output_dir)

    # 完了通知
    messagebox.showinfo("完了", "すべてのPDFファイルの処理が終了しました。")
    print("--- すべての処理が完了しました ---")
