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

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


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

-- define screen height and width
local screen_height = awful.screen.focused().geometry.height
local screen_width = awful.screen.focused().geometry.width

-- define module table
local rules = {}


-- ===================================================================
-- Rules
-- ===================================================================


-- return a table of client rules including provided keys / buttons
function rules.create(clientkeys, clientbuttons)
    return {
        -- All clients will match this rule.
        {
            rule = {},
            properties = {
                titlebars_enabled = beautiful.titlebars_enabled,
                border_width = beautiful.border_width,
                border_color = beautiful.border_normal,
                focus = awful.client.focus.filter,
                raise = true,
                keys = clientkeys,
                buttons = clientbuttons,
                screen = awful.screen.preferred,
                placement = awful.placement.centered,
                size_hints_honor = false
            },
        },
        -- Floating clients.
        {
            rule_any = {
                instance = {
                    "DTA",
                    "copyq",
                },
                class = {
                    "Nm-connection-editor"
                },
                name = {
                    "Event Tester",
                    "Steam Guard - Computer Authorization Required"
                },
                role = {
                    "pop-up",
                    "GtkFileChooserDialog"
                },
                type = {
                    "dialog"
                }
            }, properties = {floating = true}
        },

        -- Fullscreen clients
        {
            rule_any = {
                class = {
                    "Terraria.bin.x86",
                },
            }, properties = {fullscreen = true}
        },

        -- "Switch to tag"
        -- These clients make you switch to their tag when they appear
        {
            rule_any = {
                class = {
                    "Firefox"
                },
            }, properties = {switchtotag = true}
        },

        -- Visualizer
        {
            rule_any = {name = {"cava"}},
            properties = {
                floating = true,
                maximized_horizontal = true,
                sticky = true,
                ontop = false,
                skip_taskbar = true,
                below = true,
                focusable = false,
                height = screen_height * 0.40,
                opacity = 0.6
            },
            callback = function (c)
                decorations.hide(c)
                awful.placement.bottom(c)
            end
        },

        -- File chooser dialog
        {
            rule_any = {role = {"GtkFileChooserDialog"}},
            properties = {floating = true, width = screen_width * 0.55, height = screen_height * 0.65}
        },

        -- Pavucontrol & Bluetooth Devices
        {
            rule_any = {class = {"Pavucontrol"}, name = {"Bluetooth Devices"}},
            properties = {floating = true, width = screen_width * 0.55, height = screen_height * 0.45}
        },
    }
end

-- return module table
return rules