--      ████████╗ ██████╗ ██████╗     ██████╗  █████╗ ███╗   ██╗███████╗██╗
--      ╚══██╔══╝██╔═══██╗██╔══██╗    ██╔══██╗██╔══██╗████╗  ██║██╔════╝██║
--         ██║   ██║   ██║██████╔╝    ██████╔╝███████║██╔██╗ ██║█████╗  ██║
--         ██║   ██║   ██║██╔═══╝     ██╔═══╝ ██╔══██║██║╚██╗██║██╔══╝  ██║
--         ██║   ╚██████╔╝██║         ██║     ██║  ██║██║ ╚████║███████╗███████╗
--         ╚═╝    ╚═════╝ ╚═╝         ╚═╝     ╚═╝  ╚═╝╚═╝  ╚═══╝╚══════╝╚══════╝

-- ===================================================================
-- Initialization
-- ===================================================================


local awful = require("awful")
local beautiful = require("beautiful")
local wibox = require("wibox")
local theme = require("theme")
local gears = require("gears")
local lain = require("lain")
local dpi = beautiful.xresources.apply_dpi
local mycpufreq = require("widgets/cpufreq")

-- import widgets
local task_list = require("widgets.task-list")

-- define module table
local top_panel = {}

local task_lists = {layout = wibox.layout.fixed.horizontal}

awful.screen.connect_for_each_screen(function(s)
    table.insert(task_lists, task_list.create(s))
end)

-- ===================================================================
-- Bar Creation
-- ===================================================================


local updates_indicator = wibox.widget{
    {
        layout = wibox.layout.fixed.horizontal,
        {
            {
                widget = awful.widget.watch('bash -c "checkupdates | wc -l"', 360),
            },
            top = 4, bottom = 4, left = 10, right = 10,
            widget = wibox.container.margin
        },
        wibox.widget.textbox(' Updates  '),
    },
    widget = wibox.container.background
}

top_panel.create = function(s)
   local panel = awful.wibar({
      screen = s,
      position = "top",
      ontop = true,
      height = beautiful.top_panel_height,
      width = s.geometry.width,
      bg = beautiful.bg_normal .. "99"
   })

   panel:setup {
      expand = "none",
      layout = wibox.layout.align.horizontal,
      task_lists,
      wibox.widget.textclock('%a %b %d, %H:%M:%S', 1),
      {
         layout = wibox.layout.fixed.horizontal,
         wibox.layout.margin(wibox.widget.systray(), dpi(5), dpi(5), dpi(5), dpi(5)),
         wibox.widget.textbox('    |  '),
         updates_indicator,
         wibox.widget.textbox('  |  '),
         lain.widget.mem({
             settings = function()
                 widget:set_markup(lain.util.markup.font(theme.font, "  " .. mem_now.used .. " MB  "))
             end,
         }),
         wibox.widget.textbox('  |  '),
         lain.widget.cpu({
             settings = function()
                 widget:set_markup(lain.util.markup.font(theme.font, "  CPU:  " .. cpu_now.usage .. "%  "))
             end,
         }),
         wibox.widget.textbox('  |  '),
         awful.widget.watch('bash -c "/usr/bin/cat /proc/cpuinfo | grep MHz | cut -b 12- | sort -r | head -n 1 | xargs printf \'%f / 1000\n\' | bc -l | cut -b -4"', 1),
         wibox.widget.textbox('GHz  |  '),
         awful.widget.watch('bash -c "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"', 1),
         wibox.widget.textbox('  |  '),
         awful.widget.watch('bash -c "sensors | grep Tctl | cut -f 10 -d \' \' | cut -c 2-"', 5),
         wibox.widget.textbox('  |  '),
         wibox.layout.margin(require("widgets.layout-box"), dpi(5), dpi(5), dpi(5), dpi(5)),
      }
   }


   -- ===================================================================
   -- Functionality
   -- ===================================================================


   -- hide panel when client is fullscreen
   local function change_panel_visibility(client)
      if client.screen == s then
         panel.ontop = not client.fullscreen
      end
   end

   -- connect panel visibility function to relevant signals
   client.connect_signal("property::fullscreen", change_panel_visibility)
   client.connect_signal("focus", change_panel_visibility)

   updates_indicator:connect_signal("button::press", function(c, _, _, button)
         awful.spawn('alacritty -e bash -c "yay ; echo \'\nDone, press any key to exit...\' ; read"')
   end)

   updates_indicator:connect_signal("mouse::enter", function(c) c:set_bg(theme.bg_normal .. "99") end)
   updates_indicator:connect_signal("mouse::leave", function(c) c:set_bg(theme.bg_normal .. "20") end)


end

return top_panel