// Master Component & Instance system with property overrides.

///|
pub(all) struct ComponentMaster {
  id : NodeID
  name : String
  root_node_id : NodeID
} derive(Eq, Debug)

///|
pub(all) struct ComponentInstance {
  id : NodeID
  master_id : NodeID
  name_override : String?
  opacity_override : Double?
} derive(Eq, Debug)

///|
pub fn instantiate_component(
  doc : ArtboardDocument,
  master : ComponentMaster,
  instance_id : NodeID,
) -> NodeID? {
  match doc.get_node(master.root_node_id) {
    None => None
    Some(root) => {
      let instance_node = {
        ..root,
        id: instance_id,
        name: root.name + " (Instance)",
        parent_id: None,
      }
      doc.add_node(instance_node, None)
      Some(instance_id)
    }
  }
}