import networkx as nx

class Resource:
    def __init__(self, resource_type):
        self.resource_type = resource_type

def create_resource_class(resource_type):
    return type(resource_type, (Resource,), {})

def set_resource_type(graph):
    for node, data in graph.nodes(data=True):
        print(node, data)

    print("-----------------------------")

    nodes_to_replace = []
    for node, data in graph.nodes(data=True):
        print(isinstance(node, Resource), node, type(node))
        if isinstance(node, Resource):
            print("Found a resource: ", node)
            resource_type = node.resource_type
            if resource_type:
                # Dynamically create a new class based on the resource_type
                NewResourceClass = create_resource_class(resource_type)
                new_node = NewResourceClass(resource_type)
                nodes_to_replace.append((node, new_node, data))
            else:
                print(f"Warning: Node {node} is a resource but has no resource_type")
    
    # Replace old nodes with new ones
    for old_node, new_node, data in nodes_to_replace:
        graph.add_node(new_node, **data)
        for pred in graph.predecessors(old_node):
            graph.add_edge(pred, new_node)
        for succ in graph.successors(old_node):
            graph.add_edge(new_node, succ)
        graph.remove_node(old_node)
""" 
    for node, data in graph.nodes(data=True):
        print(node, data) """