from Load_process.LoadData import Loding_Data_Root
from Image_Process.Image_Generator import Image_generator
from Load_process.file_processing import Process_File
from model_data_processing.processing_for_cut_image import Cut_Indepentend_Data
from Load_process.Loading_Tools import Load_Data_Prepare, Load_Data_Tools

class Load_ImageGenerator():
    '''
    這是一個拿來進行資料強化的物件，最主要結合了學姊給的資料強化與我自行設定的資料強化。
藉由此物件先將資料讀取出來，並將資料分別進行資料強化，利用資料強化來迷部資料的不平衡
這只是其中一個實驗

Parmeter
    standard_root: 做跟學姊給的資料強化同一種的資料強化
    myself_root: 資料強化的內容參數是我自己設定的
    IndependentDataRoot: 要存回去的資料夾路徑
    Herpeslabels: 皰疹的類別
    MonKeyPoxlabels: 猴痘的類別(猴痘、水痘、正常)
    herpes_data: 合併herpes Dataset的資料成一個List
    MonkeyPox_data: 合併MonkeyPox DataSet 的資料成一個List
    '''
    def __init__(self, Training_Root,Test_Root, Validation_Root, Generator_Root, Labels) -> None:
        self.Training_Root = Training_Root
        self.TestRoot = Test_Root
        self.ValidationRoot = Validation_Root
        self.GeneratoRoot = Generator_Root
        self.Labels = Labels
        pass

    def process_main(self, Data_Length : int):
        File = Process_File()
        Prepare = Load_Data_Prepare()
        load = Loding_Data_Root(self.Labels, self.Training_Root, self.GeneratoRoot)
        Indepentend = Cut_Indepentend_Data(self.Training_Root, self.Labels)
        Load_Tool = Load_Data_Tools()
        Generator = Image_generator(self.GeneratoRoot, self.Labels)

        # 將測試資料獨立出來
        test_size = 0.1
        Indepentend.IndependentData_main(self.TestRoot, test_size)

        # 將驗證資料獨立出來
        test_size = 0.1
        Indepentend.IndependentData_main(self.ValidationRoot, test_size)

        if not File.Judge_File_Exist(self.GeneratoRoot): # 檔案若不存在
            # 確定我要多少個List
            Prepare.Set_Data_Content([], Data_Length)

            # 製作讀檔字典並回傳檔案路徑
            Prepare.Set_Label_List(self.Labels)
            Prepare.Set_Data_Dictionary(Prepare.Get_Label_List(), Prepare.Get_Data_Content(), Data_Length)
            Original_Dict_Data_Root = Prepare.Get_Data_Dict()
            get_all_original_image_data = Load_Tool.get_data_root(self.Training_Root, Original_Dict_Data_Root, Prepare.Get_Label_List())

            # 儲存資料強化後資料
            Generator.Processing_Main(get_all_original_image_data) # 執行資料強化
        else: # 若檔案存在
            print("standard data and myself data are exist\n")
        
        # 執行讀檔
        return load.process_main()