-- factoryos.programs.mainframe — hosts core services + desktop shell.

local log       = require("factoryos.core.log")
local config    = require("factoryos.core.config")
local Node      = require("factoryos.net.node")
local registry  = require("factoryos.services.registry")
local telemetry = require("factoryos.services.telemetry")
local shell     = require("factoryos.shell")

local cfg = config.loadOr("/factoryos/node.cfg", {
  name = "mainframe-01", role = "mainframe",
})
cfg.role = "mainframe"
log.setup({ file = "/factoryos/data/node.log", level = cfg.logLevel })

local node = Node.new(cfg)
local ok, err = node:open()
if not ok then error("mainframe: " .. tostring(err)) end

local R = registry.attach(node)
telemetry.attach(node)

local sh = shell.start(node, {
  tiles = cfg.tiles, screenW = cfg.screenW, screenH = cfg.screenH,
  displayChannel = cfg.displayChannel, textScale = cfg.textScale,
  apps = cfg.apps, registryNodes = R.nodes,
})

log.info("mainframe %s up (id %s)", node.name, node.id)
node:run()
