class Lutaml::Model::Schema::XmlCompiler::ComplexType

def <<(instance)

def <<(instance)
  return if instance.nil?
  @instances << instance
end

def base_class_name

def base_class_name
  case base_class
  when SERIALIZABLE_BASE_CLASS
    SERIALIZABLE_BASE_CLASS
  else
    Utils.camel_case(last_of_split(base_class))
  end
end

def base_class_require

def base_class_require
  case base_class
  when SERIALIZABLE_BASE_CLASS
    "require \"lutaml/model\""
  else
    "require_relative \"#{Utils.snake_case(last_of_split(base_class))}\""
  end
end

def extended_indent

def extended_indent
  @indent * 2
end

def initialize(base_class: SERIALIZABLE_BASE_CLASS)

def initialize(base_class: SERIALIZABLE_BASE_CLASS)
  @base_class = base_class
  @instances = []
end

def last_of_split(field)

def last_of_split(field)
  field&.split(":")&.last
end

def namespace_and_prefix

def namespace_and_prefix
  return "" if Utils.blank?(@namespace) && Utils.blank?(@prefix)
  [namespace_option, @prefix&.inspect].compact.join(", ")
end

def namespace_option

def namespace_option
  "#{extended_indent}namespace #{@namespace.inspect}"
end

def required_files

def required_files
  files = [base_class_require]
  files.concat(@instances.map(&:required_files).flatten.compact.uniq)
  files.concat(simple_content.required_files) if simple_content?
  files
end

def root_options

def root_options
  return "" unless mixed
  ", mixed: true"
end

def setup_options(options)

def setup_options(options)
  @namespace, @prefix = options.values_at(:namespace, :prefix)
  @indent = " " * options&.fetch(:indent, 2)
end

def simple_content?

def simple_content?
  Utils.present?(@simple_content)
end

def simple_content_attribute

def simple_content_attribute
  SIMPLE_CONTENT_ATTRIBUTE_TEMPLATE.result(binding) if simple_content? || mixed
end

def simple_content_type

def simple_content_type
  return "string" unless simple_content?
  Utils.snake_case(last_of_split(simple_content.base_class))
end

def to_class(options: {})

def to_class(options: {})
  setup_options(options)
  TEMPLATE.result(binding)
end