#!/usr/bin/env ruby

require 'json'

def stat(key, val = '')
  puts "#{key} #{val}"
end

cfg = JSON.parse(File.read("/srv/secure/config.json"))

stat "cfg.role", cfg['role']

stat "net.tag", cfg['tag']
stat "net.upstream", File.read("/etc/upstream").chomp
stat "net.host", File.read("/etc/hostname").chomp
if cfg['role'] == "server"
  stat "net.ipv4", "192.168.1.1"
else
  stat "net.ipv4", `ip route`.lines.select { _1.include?("192") }.first&.split(" ")&.[](8)
end
stat "net.ipv6", ""
stat "net.port", "3210"

stat "date", `date -Iseconds --utc | cut -d+ -f1`.chomp + ".000Z"

nm = `nmcli`
stat "net.wifi", nm.include?('wlan0: connected') || nm.include?('mlan0: connected')
stat "net.eth", nm.include?('eth0: connected') || nm.include?('eth1: connected')

stat "ctl.locked", File.read("/sys/class/tty/tty0/active").chomp == 'tty3'
stat "ctl.autostart", File.exist?("/tmp/guest/autostart") ? `cat "/tmp/guest/autostart"`.chomp : ""
stat "ctl.framebuffer", File.exist?("/tmp/guest/framebuffer")
stat "ctl.ignored", File.exist?("/srv/guest/ignore")
stat "ctl.did-restore", File.exist?("/tmp/tl-did-restore")

has_bat = false
pattern = "Device: /org/freedesktop/UPower/devices/battery_"
`upower -d`.split("\n\n").find { _1.start_with?(pattern) }&.lines&.each do |line|
  has_bat = true
  stat "bat.state", line.split(":")[1].strip if line.include?("state")
  stat "bat.percentage", "#{line.split(':')[1].to_i}%" if line.include?("percentage")
  stat "bat.time", line.split(":")[1].strip.gsub(' hours', 'h').gsub(' minutes', 'm') if line.include?("time")
end
unless has_bat
  stat "bat.state", "none"
end

vol_left, vol_right = `pactl get-sink-volume @DEFAULT_SINK@`
  .lines.first&.gsub('Volume: ', '')&.split(',')&.map { _1.split('/')[1].strip } || %w[0% 0%]
stat "vol.left.percentage", vol_left
stat "vol.right.percentage", vol_right
stat "vol.percentage", "#{vol_left.to_i + vol_right.to_i / 2}%"

cmd_queue = Dir.children("/srv/secure/cmd/queue").sort.map { _1.split('-')[1..].join('-') }
stat "cmd.status", File.exist?("/srv/secure/cmd/status") ? File.read("/srv/secure/cmd/status").chomp.split('-')[1..].join('-') : 'failed'
stat "cmd.queue", cmd_queue.join(",")
stat "cmd.count", cmd_queue.size

`/opt/admin/bin/tl-comp-report`.lines.each { stat(*_1.split) }

stat "desktop.versions.local.current", File.read("/etc/tl-desktop-version").chomp
stat "desktop.versions.local.next", File.exist?("/var/btrfs/@root/etc/tl-desktop-version") ? File.read("/var/btrfs/@root/etc/tl-desktop-version").chomp : ''
stat "desktop.versions.local.prev", File.exist?("/var/btrfs/@root.prev/etc/tl-desktop-version") ? File.read("/var/btrfs/@root.prev/etc/tl-desktop-version").chomp : ''
