import os
import sys
import subprocess
import importlib.util
from pathlib import Path
import tkinter as tk
from tkinter import filedialog

def check_and_install_library(lib_name, import_name):
    if importlib.util.find_spec(import_name) is None:
        cevap = input(f"Bu betiğin çalışması için {lib_name} kütüphanesinin yüklü olması gerekir. Şimdi yüklensin mi? (E/H): ")
        if cevap.lower() == 'e':
            subprocess.check_call([sys.executable, "-m", "pip", "install", lib_name])
            print(f"{lib_name} başarıyla yüklendi.\n")
        else:
            print("Gerekli kütüphane yüklenmediği için işlem iptal edildi.")
            input("\nÇıkmak için Enter'a basın...")
            sys.exit()

check_and_install_library("pyperclip", "pyperclip")
import pyperclip

def generate_ascii_tree(directory, prefix=""):
    path = Path(directory)
    tree_str = ""

    if prefix == "":
        tree_str += f"{path.name}/\n"

    items = sorted(path.iterdir(), key=lambda x: (x.is_file(), x.name.lower()))
    
    pointers = ["├── "] * (len(items) - 1) + ["└── "] if items else []

    for pointer, item in zip(pointers, items):
        if item.is_dir():
            tree_str += f"{prefix}{pointer}{item.name}/\n"
            extension = "│   " if pointer == "├── " else "    "
            tree_str += generate_ascii_tree(item, prefix=prefix + extension)
        else:
            tree_str += f"{prefix}{pointer}{item.name}\n"

    return tree_str

if __name__ == "__main__":
    root = tk.Tk()
    root.withdraw()
    root.attributes("-topmost", True)
    
    target_directory = filedialog.askdirectory(title="Ağaç Çıktısı Alınacak Klasörü Seçin")
    
    if target_directory:
        tree_output = generate_ascii_tree(target_directory)
        print("\n" + tree_output)
        
        copy_choice = input("Sonuç panoya kopyalansın mı? (E/H): ")
        if copy_choice.lower() == 'e':
            pyperclip.copy(tree_output)
            print("Ağaç çıktısı başarıyla panoya kopyalandı!")
    else:
        print("Herhangi bir klasör seçilmedi.")
        
    input("\nÇıkmak için Enter'a basın...")