(include "variables.yuck")
(include "templates.yuck")


;; left


(defwidget time []
    (eventbox
        :onclick ``
        :class "smallBox"
        :valign "center"
        :height 20
        :width 70
        (label
            :text "${formattime(EWW_TIME, "%H:%M:%S")}")))

;; center


(defwidget workspaces [monitor]
    (box
        :space-evenly false
        :spacing 3
        (for workspace in workspaces
            (workspace
                :activeOn {workspace.normal.activeOn}
                :occupied {workspace.normal.occupied}
                :id {workspace.normal.id}
                :icon {workspace.normal.icon}
                :monitor {monitor}))))


;; right


(defwidget cpu []
    (icon
        :widgetclass "cpu"
        :hover "${round(EWW_CPU.avg, 1)}%"
        :percentage {round(EWW_CPU.avg, 1)}
        :image "images/cpu.png"))

(defwidget ram []
    (icon
        :widgetclass "ram"
        :hover "${round(EWW_RAM.used_mem /(1024*1024*1024), 1)} GiB | ${round(EWW_RAM.used_mem_perc, 1)}%"
        :percentage {round(EWW_RAM.used_mem_perc, 1)}
        :image "images/ram.png"))

(defwidget audio []
    (icon
        :widgetclass {volume.muted == 1 ? "muted" : "volume"}
        :hover "${volume.volume}%"
        :percentage {volume.volume >= 0 && volume.volume <= 100 ? volume.volume : 0}
        :image {volume.muted == 1 ? "images/volumeMuted.png" : "images/volume.png"}))

(defwidget brightness []
    (icon
        :widgetclass "brightness"
        :hover "${brightnessValue / 960}%"
        :percentage {brightnessValue / 960}
        :image "images/brightness.png"))

(defwidget network []
    (icon
        :widgetclass "network"
        :hover {network.name}
        :percentage "100"
        :image "images/${network.image}.png"))

(defwidget bluetooth []
    (icon
        :widgetclass "bluetooth"
        :hover {bluetooth.name}
        :percentage {bluetooth.battery}
        :image "images/bluetooth.png"))

(defwidget battery []
    (icon
        :widgetclass {EWW_BATTERY.BAT1.status == "Charging" ? "battery" : EWW_BATTERY.total_avg > 25 ? "battery" : "batteryLow"}
        :hover "${round(EWW_BATTERY.total_avg, 1)}%"
        :percentage {EWW_BATTERY.total_avg <= 90 ? round(EWW_BATTERY.total_avg, 1)/0.9 : 100}
        :image {EWW_BATTERY.BAT1.status == "Charging" ? "images/charging.png" : EWW_BATTERY.total_avg > 25 ? "images/battery.png" : "images/batteryLow.png"}))

(defwidget power []
    (icon
        :widgetclass "power"
        :hover "placeholder"
        :percentage "0"
        :image "images/power.png"))




;; Widget blocks

(defwidget media []
    (box
        :class "smallBox"
        :height 20
        :valign "center"
        :space-evenly false
        :visible {media.status == "Playing" ? true : false}
        (smallSpacer)
        (label
            :text {media.name}
            :tooltip {media.name}
            :limit-width 40)
        (smallSpacer)))

(defwidget processing []
    (eventbox
        :onclick 'hyprctl dispatch exec "[float; pin; size 40% 40%; move 100%-41% 40] kitty bpytop -b proc"'
        :class "smallBox"
        (box
            :space-evenly false
            :halign "end"
            :valign "center"
            :height 20
            (smallSpacer)
            (cpu)
            (space)
            (ram)
            (smallSpacer))))

(defwidget controlls []
    (eventbox
        :onclick 'hyprctl dispatch exec "[float; pin; size 40% 40%; move 100%-41% 40] kitty pulsemixer"'
        :class "smallBox"
        (box
            :space-evenly false
            :halign "end"
            :valign "center"
            :height 20
            (smallSpacer)
            (audio)
            (space)
            (brightness)
            (smallSpacer))))

(defwidget wireless []
    (eventbox
        :onclick "`networkmanager_dmenu`"
        :class "smallBox"
        (box
            :space-evenly false
            :halign "end"
            :valign "center"
            :height 20
            (smallSpacer)
            (network)
            (space)
            (bluetooth)
            (smallSpacer))))

(defwidget energy []
    (eventbox
        :onclick `sleep 1 && systemctl hibernate`
        :class "smallBox"
        (box
            :space-evenly false
            :halign "end"
            :valign "center"
            :height 20
            (smallSpacer)
            (battery)
            (space)
            (power)
            (smallSpacer))))


(defwidget start []
    (box
        :orientation "h"
        :space-evenly false
        :halign "start"
        (space)
        (time)))

(defwidget center [monitor]
    (box
        :orientation "h"
        :space-evenly false
        :halign "center"
        (workspaces
            :monitor {monitor})
))

(defwidget end []
    (box
        :spacing 2
        :orientation "h"
        :space-evenly false
        :valign "center"
        :halign "end"

        (processing)

        (seperator)
        
        (controlls)

        (seperator)

        (wireless)

        (seperator)

        (energy)

        (space)))

(defwidget bar [monitor]
    (centerbox    :orientation "h"
        (start)
        (center
            :monitor {monitor})
        (end)))


(defwindow bar [monitor width height]
    :monitor {monitor}
    :class "bar"
    :geometry (geometry
        :x "0%"
        :y "5px"
        :width "${width}px"
        :height "${height}px"
        :anchor "top center")
    :stacking "fg"
    :exclusive true
    (bar
        :monitor {monitor}))