import pickle
import threading
import os
from myutils.ConfigManager import myCongif

class PickleManager:
    def __init__(self):
        self.lock = threading.Lock()  # 线程锁
        self.tree_file = myCongif.get_data("TreeFile")

    def getfile_path(self,filename=""):
        filepath = self.tree_file
        if filename:
            filepath = "tree_data/"+filename
        return filepath

    def WriteData(self,attack_tree,filename=""):
        filepath = self.getfile_path(filename)
        with self.lock:
            with open(filepath, 'wb') as f:
                pickle.dump(attack_tree, f)

    def ReadData(self,filename=""):
        attack_tree = None
        filepath = self.getfile_path(filename)
        if os.path.exists(filepath):
            with self.lock:
                with open(filepath, "rb") as f:
                    attack_tree = pickle.load(f)
        return attack_tree

    def DelData(self,filename=""):
        filepath = self.getfile_path(filename)
        #删除文件
        try:
            os.remove(filepath)
            return True
        except FileNotFoundError:
            # 文件不存在
            return True
        except PermissionError:
            # 没有删除权限/文件被占用
            return False
        except IsADirectoryError:
            # 路径指向的是目录而非文件
            return False
        except Exception as e:
            # 其他未知错误(如路径非法、存储介质故障等)
            print(f"删除文件时发生意外错误: {str(e)}")
            return False



g_PKM = PickleManager()