import os
import shutil
import json
import tkinter as tk
from tkinter import filedialog

def is_json(content: str) -> bool:
    try:
        json.loads(content)
        return True
    except Exception:
        return False

def main():
    # フォルダ選択ダイアログ
    root = tk.Tk()
    root.withdraw()
    folder_path = filedialog.askdirectory(title="Plz choose a folder.")

    if not folder_path:
        print("u did'nt choose a folder.")
        return

    # 拡張子分類リスト
    music_exts = {".mp3", ".wav", ".weba", ".m4a"}
    video_exts = {".mp4", ".mov", ".avi"}
    dvd_exts   = {".vob", ".ifo", ".bup"}
    website_exts = {".html", ".css", ".js"}

    # サブフォルダの創作
    for root_dir, _, files in os.walk(folder_path):
        for filename in files:
            ext = os.path.splitext(filename)[1].lower()
            file_path = os.path.join(root_dir, filename)

            # うんこなう
            target_folder = "unknown"

            if ext == ".jpg":
                target_folder = "jpg"
            elif ext == ".png":
                target_folder = "png"
            elif ext == ".xml":
                target_folder = "xml"
            elif ext == ".dll":
                target_folder = "dll"
            elif ext == ".zip":
                target_folder = "zip"
            elif ext == ".bmp":
                target_folder = "bmp"
            elif ext in music_exts:
                target_folder = "Music"
            elif ext in video_exts:
                target_folder = "Video"
            elif ext == ".webp":
                target_folder = "webp"
            elif ext in dvd_exts:
                target_folder = "DVD"
            elif ext == ".exe":
                target_folder = "exe"
            elif ext == ".bat":
                target_folder = "bat"
            elif ext == ".py":
                target_folder = "Python"
            elif ext == ".java":
                target_folder = "Java"
            elif ext == ".psd":
                target_folder = "psd"
            elif ext in website_exts:
                target_folder = "Website"
            elif ext == ".txt":
                # txtは何なのか検査する
                try:
                    with open(file_path, "r", encoding="utf-8", errors="ignore") as f:
                        content = f.read().strip()
                    if is_json(content):
                        target_folder = "json"
                    else:
                        target_folder = "text"
                except Exception as e:
                    print(f"txt判定失敗: {filename}, エラー: {e}")
                    target_folder = "text"

            # 移動先フォルダを選択フォルダ直下に作成(かり)
            dest_folder = os.path.join(folder_path, target_folder)
            os.makedirs(dest_folder, exist_ok=True)

            # ファイル名
            dest_path = os.path.join(dest_folder, filename)

            # リネーム
            base_name, extname = os.path.splitext(filename)
            counter = 1
            while os.path.exists(dest_path):
                new_filename = f"{base_name}_{counter}{extname}"
                dest_path = os.path.join(dest_folder, new_filename)
                counter += 1

            # 移動
            shutil.move(file_path, dest_path)
            print(f"{file_path} → {dest_path}")

if __name__ == "__main__":
    main()
