class Syntropy::Module

def export(ref)

def export(ref)
  @__export_value__ = ref
end

def import(ref)

def import(ref)
  @loader.load(ref)
end

def initialize(env)

def initialize(env)
  @env = env
end

def page_list(ref)

def page_list(ref)
  full_path = File.join(@env[:location], ref)
  raise 'Not a directory' if !File.directory?(full_path)
  Dir[File.join(full_path, '*.md')].sort.map {
    atts, markdown = Syntropy.parse_markdown_file(it, @env)
    { atts:, markdown: }
  }
end

def prepare(loader:, env:)

def prepare(loader:, env:)
  @loader = loader
  @env = env
  const_set(:MODULE, self)
end

def route_by_host(map = nil)

def route_by_host(map = nil)
  root = @env[:location]
  sites = Dir[File.join(root, '*')]
          .reject { File.basename(it) =~ /^_/ }
          .select { File.directory?(it) }
          .each_with_object({}) { |fn, h|
    name = File.basename(fn)
    opts = @env.merge(location: fn)
    h[name] = Syntropy::App.new(opts[:machine], opts[:location], opts[:mount_path], opts)
  }
  map&.each do |k, v|
    sites[k] = sites[v]
  end
  lambda { |req|
    site = sites[req.host]
    site ? site.call(req) : req.respond(nil, ':status' => Status::BAD_REQUEST)
  }
end

def template(&block)

def template(&block)
  Papercraft.html(&block)
end