local serial = require "serialization"
local component = require "component"
local event = require "event"

local timer = -1

local cfg = {}
cfg.broadcast = true
cfg.receive = true
cfg.delay = 60
cfg.port = 3442
cfg.message = "WoLBeacon"

local function saveConfig()
 local f = io.open("/etc/wolbeacon.cfg","wb")
 if not f then
  return false
 end
 f:write(serial.serialize(cfg))
 f:close()
end

local function broadcast()
 for modem in component.list("modem") do
  component.invoke(modem,"broadcast",cfg.port,cfg.message)
 end
end

local function loadConfig()
 local f = io.open("/etc/wolbeacon.cfg","rb")
 if not f then
  saveConfig()
  return false
 end
 cfg = serial.unserialize(f:read("*a")) or cfg
 f:close()
end

function start()
 loadConfig()
 if cfg.receive then
  for modem in component.list("modem") do
   component.invoke(modem,"setWakeMessage",cfg.message)
  end
 else
  for modem in component.list("modem") do
   component.invoke(modem,"setWakeMessage",nil)
  end
 end
 if cfg.broadcast then
  timer = event.timer(cfg.delay, broadcast, math.huge)
 end
end

function stop()
 event.cancel(timer)
 timer = -1
end

function reload()
 stop()
 start()
end

