local gears = require("gears")
local beautiful = require("beautiful")

local op = beautiful.flash_focus_start_opacity or 0.6
local stp = beautiful.flash_focus_step or 0.01

local flashfocus = function(c)
    if c and #c.screen.clients > 1 then
        c.opacity = op
        local q = op
        local g = gears.timer({
            timeout = stp,
            call_now = false,
            autostart = true,
        })

        g:connect_signal("timeout", function()
            if not c.valid then
                return
            end
            if q >= 1 then
                c.opacity = 1
                g:stop()
            else
                c.opacity = q
                q = q + stp
            end
        end)
    end

    -- Bring the focused client to the top
    if c then
        c:raise()
    end
end

local enable = function()
    client.connect_signal("focus", flashfocus)
end
local disable = function()
    client.disconnect_signal("focus", flashfocus)
end

return { enable = enable, disable = disable, flashfocus = flashfocus }