local awful = require("awful")
local wibox = require("wibox")
local beautiful = require("beautiful")
local buttons = require("buttons")

-- load widgets
--local mylauncher         = require("widgets.button")
local widget_cpu_usage   = require("widgets.cpu")
local widget_ram_usage   = require("widgets.ram")
local widget_temperature = require("widgets.temperature")
local widget_battery     = require("widgets.battery")
local classiclayoutbox   = require("widgets.classiclayouts")
local volume_control     = require("widgets.pavolctld")
local tasklist           = require("widgets.tasklist")
local widget_volume = volume_control.textbox

-- store widgets here
local spacing = 8

local widgets = {
	temperature_file = nil;
	spacing = spacing, -- constant
	layoutlist = wibox.widget {
		layout = wibox.layout.fixed.horizontal,
		buttons = layout_buttons,
		wibox.container.margin(
			classiclayoutbox(s),
			spacing, spacing, 0, 0
		),
	},
	taglist = function(s) return awful.widget.taglist {
		screen  = s,
		filter  = awful.widget.taglist.filter.noempty,
		buttons = taglist_buttons,
	} end,
	tasklist = tasklist,
	textclock = {
		widget = wibox.widget.textclock,
		format = "%A, %B %-e, %-I:%M %p",
		font = beautiful.textclock_font,
	},
	cpu = {
		layout = wibox.layout.fixed.horizontal,
		wibox.widget.textbox "CPU: ",
		widget_cpu_usage,
		wibox.widget.textbox "% ",
	},
	temp = widget_temperature(),
	ram = {
		layout = wibox.layout.fixed.horizontal,
		wibox.widget.textbox "RAM: ",
		widget_ram_usage,
		wibox.widget.textbox "%",
	},
	vol = {
		layout = wibox.layout.fixed.horizontal,
		buttons = volume_buttons,
		wibox.widget.textbox "VOL: ",
		widget_volume,
		wibox.widget.textbox "%",
	},
	bat = {
		layout = wibox.layout.fixed.horizontal,
		wibox.widget.textbox "BAT: ",
		widget_battery,
	},
}

-- left widget group func
function widgets.left_widgets(s) return wibox.widget {
	layout = wibox.layout.fixed.horizontal,
	spacing = spacing,
	{
		layout = wibox.layout.fixed.horizontal,
		widgets.layoutlist,
		widgets.taglist(s),
	},
	widgets.tasklist(s),
} end

-- middle widget group func
function widgets.middle_widgets(s) return wibox.widget {
	layout = wibox.layout.fixed.horizontal,
	widgets.textclock,
} end

-- right widget group func
function widgets.right_widgets(s) return wibox.widget {
	layout = wibox.layout.fixed.horizontal,
	{
		layout = wibox.layout.fixed.horizontal,
		spacing = spacing * 2,
		{
			layout = wibox.layout.fixed.horizontal,
			widgets.cpu,
			widgets.temp,
		},
		widgets.ram,
		widgets.bat,
		widgets.vol,
	},
	{
		widget = wibox.widget.separator,
		opacity = 0,
		forced_width = spacing
	},
	--mylauncher,
} end

-- create a wibox for each screen and add it
awful.screen.connect_for_each_screen(function (s)
	awful.tag({"1", "2", "3", "4", "5", "6", "7", "8", "9"}, s, awful.layout.layouts[1])
	s.mypromptbox = awful.widget.prompt()

	-- create the wibox
	s.mywibox = awful.wibar({ position = "top", screen = s })

	-- add widgets to the wibox
	s.mywibox:setup {
		layout = wibox.layout.align.horizontal,
		expand = "none",
		spacing = spacing,
		widgets.left_widgets(s),
		wibox.container.margin(
			widgets.middle_widgets(s),
			spacing, spacing, 0, 0
		),
		widgets.right_widgets(s),
	}
end)

return widgets