local awful = require("awful")
local gears = require("gears")
local gcolor = require("gears.color")
local beautiful = require("beautiful")
local math = math

local mylayout = {}

mylayout.name = "vertical"

function mylayout.arrange(p)
    local area = p.workarea
    local t = p.tag or screen[p.screen].selected_tag
    local mwfact = t.master_width_factor
    local nmaster = math.min(t.master_count, #p.clients)
    local nslaves = #p.clients - nmaster

    local master_area_width = area.width * mwfact
    local slave_area_width = area.width - master_area_width

    -- Special case: no slaves 
    if nslaves == 0 then 
        master_area_width = area.width
        slave_area_width = 0
    end 

    -- Special case: no masters 
    if nmaster == 0 then 
        master_area_width = 0
        slave_area_width = area.width
    end 

    -- iterate through masters
    for idx=1,nmaster do
        local c = p.clients[idx]
        local g = {
            x = area.x,
            y = area.y + (idx-1)*(area.height/nmaster),
            width = master_area_width,
            height = area.height/nmaster,
        }
        p.geometries[c] = g
    end

    -- itearte through slaves
    for idx=1,nslaves do
        local c = p.clients[idx+nmaster]
        local g = {
            x = area.x + master_area_width + (idx-1)*(slave_area_width/nslaves),
            y = area.y,
            width = slave_area_width/nslaves,
            height = area.height,
        }
        p.geometries[c] = g
    end
end

local icon_raw = gears.filesystem.get_configuration_dir() .. tostring(...):match("^.*bling"):gsub("%.", "/") .. "/icons/layouts/vertical.png"

local function get_icon()
    if icon_raw ~= nil then
        return gcolor.recolor_image(icon_raw, beautiful.fg_normal)
    else
        return nil
    end
end

return {
    layout = mylayout,
    icon_raw = icon_raw,
    get_icon = get_icon,
}