---------------------------------------------------
-- Licensed under the GNU General Public License v2
--  * (c) 2010, Adrian C. <anrxc@sysphere.org>
---------------------------------------------------

-- {{{ Grab environment
local tonumber = tonumber
local io = { popen = io.popen }
local setmetatable = setmetatable
local table = { insert = table.insert }
local string = { match = string.match }
-- }}}


-- Batacpi: provides state, charge, and remaining time for all batteries using acpitool
-- vicious.contrib.batacpi
local batacpi = {}


-- {{{ Battery widget type
local function worker(format)
    local battery_info  = {}
    local battery_state = {
        ["full"] = "↯",
        ["unknown"] = "⌁",
        ["charged"] = "↯",
        ["charging"] = "+",
        ["discharging"] = "-"
    }

    -- Get data from acpitool
    local f = io.popen("acpitool -b")

    for line in f:lines() do
        -- Check if the battery is present
        if string.match(line, "^[%s]+Battery.*") then
            -- Store state and charge information
            table.insert(battery_info, (battery_state[string.match(line, "([%a]*),") or "unknown"]))
            table.insert(battery_info, (tonumber(string.match(line, "([%d]?[%d]?[%d])%.")) or 0))
            -- Store remaining time information
            table.insert(battery_info, (string.match(line, "%%,%s(.*)") or "N/A"))
        else
            return {battery_state["unknown"], 0, "N/A"}
        end
    end
    f:close()

    return battery_info
end
-- }}}

return setmetatable(batacpi, { __call = function(_, ...) return worker(...) end })
