#!/usr/bin/lua
-- event-forwarder ubus RPC plugin
-- Provides remote control via ubus

local json = require "cbi.json"
local ubus = require "ubus"
local uci = require "luci.model.uci".cursor()

module("luci.rpcd.event-forwarder", package.seeall)

function getStatus()
    local conn = ubus.connect()
    local status = {
        running = (tonumber(luci.sys.exec("pgrep -f event-forwarder")) > 0),
        router_id = uci:get("event-forwarder", "router", "id") or "unknown",
        server_url = uci:get("event-forwarder", "server", "url") or "",
        events_sent = 0,  -- Could track this in a file
    }
    conn:close()
    return status
end

function getEvents(count)
    count = tonumber(count) or 10
    local events = {}
    local f = io.popen("tail -n " .. count .. " /var/log/event-forwarder.log 2>/dev/null")
    if f then
        for line in f:lines() do
            table.insert(events, line)
        end
        f:close()
    end
    return events
end

function testConnection()
    local conn = ubus.connect()
    local res = conn:call("network", "getStatus", {})
    conn:close()
    return { success = true, network = res }
end

function _init()
    local lp = require "luci.http"
    local cb = require "luci.rpcd".callback
    
    local rv = {
        ["getStatus"]   = { cb=getStatus,   desc="Get event forwarder status" },
        ["getEvents"]   = { cb=getEvents,   desc="Get recent events" },
        ["test"]       = { cb=testConnection, desc="Test connection" },
    }
    
    return rv
end

return _init()