import os
import shutil
import tkinter as tk
from tkinter import filedialog, messagebox
from datetime import datetime
import pandas as pd

def organize_and_list_files():
    # 1. ユーザーにフォルダを選択させる
    root = tk.Tk()
    root.withdraw() # メインウィンドウは非表示にする

    target_dir = filedialog.askdirectory(title="仕分け・リスト化するフォルダを選択してください")

    # フォルダが選択されなかった場合は処理を中断
    if not target_dir:
        return

    file_data = []
    success_count = 0

    try:
        # フォルダ内のファイルを走査
        for filename in os.listdir(target_dir):
            filepath = os.path.join(target_dir, filename)

            # ファイルのみを対象とし、作成される予定のCSV自体は除外する
            if os.path.isfile(filepath) and filename != "file_list.csv":
                # 作成日時（タイムスタンプ）を取得
                stat = os.stat(filepath)
                # Windowsではst_ctimeが作成日時、Mac/Linuxでは古いシステムによって異なる場合があります
                creation_time = datetime.fromtimestamp(stat.st_ctime)

                # リスト用のデータ保持
                file_data.append({
                    "ファイル名": filename,
                    "作成日時": creation_time.strftime('%Y-%m-%d %H:%M:%S'),
                    "サイズ(KB)": round(stat.st_size / 1024, 2)
                })

                # 仕分け先フォルダ名（年-月：例「2026-09」）
                folder_name = creation_time.strftime('%Y-%m')
                dest_dir = os.path.join(target_dir, folder_name)

                # フォルダがなければ作成して移動
                os.makedirs(dest_dir, exist_ok=True)
                shutil.move(filepath, os.path.join(dest_dir, filename))
                success_count += 1

        if success_count > 0:
            # Excelで文字化けしないように utf-8-sig でCSV出力
            df = pd.DataFrame(file_data)
            df.to_csv(os.path.join(target_dir, "file_list.csv"), index=False, encoding="utf-8-sig")

            messagebox.showinfo("完了", f"{success_count}個のファイルを仕分けし、\n『file_list.csv』を作成しました。")
        else:
            messagebox.showinfo("お知らせ", "仕分け対象のファイルが見つかりませんでした。")

    except Exception as e:
        messagebox.showerror("エラー", f"エラーが発生しました:\n{str(e)}")

if __name__ == "__main__":
    organize_and_list_files()
