import importlib.util
import os

class IFikoCalismaAlani():
    __klasor=None
    komut_listesi=[]
    ana_program=None

    def __init__(self, parent=None, alan:str=None,ana_program=None):
        self.__klasor=alan
        self.parent=parent
        self.ana_program=ana_program
        self.komutListesiniAl()

    def komutListesiniAl1(self):
        self.komut_listesi.clear()
        file_names = [file for file in os.listdir(self.__klasor) if file.endswith(".py") and not file.startswith("__init__")]
        # Dosya isimlerini modül adlarına dönüştür
        module_names = [os.path.splitext(file)[0] for file in file_names]
        # Her bir dosyayı import et ve sınıflara eriş
        for module_name, file_name in zip(module_names, file_names):
            file_path = os.path.join(self.__klasor, file_name)
            spec = importlib.util.spec_from_file_location(module_name, file_path)
            module = importlib.util.module_from_spec(spec)
            spec.loader.exec_module(module)
            
            # Modül içindeki sınıfları listele
            classes = [name for name, obj in module.__dict__.items() if isinstance(obj, type)]
            
            # Her sınıf için örnek oluştur ve işlem yap
            # for class_name in classes:
            
            cls = getattr(module, classes[-1])
            print(cls)
                # instance = cls()
            self.komut_listesi.append(cls)
                # Örnek üzerinde işlem yapabiliriz, örneğin bir metodu çağırabiliriz
                # if hasattr(instance, 'run'):
                #     instance.run()
    
    def komutListesiniAl(self):
        self.komut_listesi.clear()
        # Klasörleri listeleme
        folders = sorted([f for f in os.listdir(self.__klasor) if os.path.isdir(os.path.join(self.__klasor, f)) and f!="__pycache__"], key=lambda x: os.path.getmtime(os.path.join(self.__klasor, x)), reverse=True)
        for folder in folders:
            file_path = os.path.join(self.__klasor, folder,folder+".py")
            spec = importlib.util.spec_from_file_location(folder, file_path)
            module = importlib.util.module_from_spec(spec)
            spec.loader.exec_module(module)
            
            # Modül içindeki sınıfları listele
            classes = [name for name, obj in module.__dict__.items() if isinstance(obj, type)]
            
            # Her sınıf için örnek oluştur ve işlem yap
            # for class_name in classes:
            
            cls = getattr(module, classes[-1])
            # instance = cls()
            self.komut_listesi.append(cls(parent=self,ana_program=self.ana_program))